【docker案例】專案打包部署
docker compose用法
什麼是compose
Compose是一個定義和管理多容器的工具,使用Python語言編寫。使用Compose配置檔案描述多個容器應用的架構,比如使用什麼映象、資料卷、網路、對映埠等;然後一條命令管理所有服務,比如啟動、停止、重啟等。
安裝compose
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
或者
pip install docker-compose
compose使用yaml檔案格式
YAML是一種標記語言很直觀的資料序列化格式,可讀性高。類似於XML資料描述語言,語法比XML簡單的很多。
YAML資料結構通過縮排來表示,連續的專案通過減號來表示,鍵值對用冒號分隔,陣列用中括號括起來,hash用花括號括起來。
YAML檔案格式注意事項:
- 不支援製表符tab鍵縮排,需要使用空格縮排
- 通常開頭縮排2個空格
- 字元後縮排1個空格,如冒號、逗號、橫杆
- 用井號註釋
- 如果包含特殊字元用單引號引起來
- 布林值(true、false、yes、no、on、off)必須用引號括起來,這樣分析器會將他們解釋為字串。
compose配置檔案常用欄位
compose常用命令
一鍵部署LNMP網站平臺
專案目錄結構
docker-compose.yaml是主配置檔案,mysql中有一個配置檔案和一個空的資料目錄。
nginx和php中包含配置檔案、dockerfile和原始碼包。
wwwroot是網站的根目錄。
docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 81 :80
networks:
- lnmp
volumes:
- ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build:
context: ./php
dockerfile: Dockerfile
networks:
- lnmp
volumes:
- ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
image: mysql:5.6
ports:
- 3306:3306
networks:
- lnmp
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123
networks:
lnmp:
部署
docker-compose -f docker-compose.yml up
部署完成後通過瀏覽器訪問81埠進行測試,可以看到php的測試頁面。
後臺執行
目前是在前臺執行,退出終端後進程結束,可以增加-d
選項來在後臺執行。
docker-compose -f docker-compose.yml up -d
然後檢視容器執行情況:
docker-compose ps
這裡注意在執行docker-compose時會讀取yaml檔案,所以一定要在yaml檔案所在目錄下執行命令或者指定檔案路徑,否則會報錯。
安裝wordpress測試
刪除釋出目錄中的php測試頁面,下載wordpress原始碼到網站根目錄並解壓。
通過瀏覽器直接訪問81埠的wordpress,可以進入wordpress設定頁面
設定的時候的資料庫名、使用者名稱和密碼就是在yaml檔案中設定的,資料庫主機直接寫容器的名字便會自動連線到容器中的服務。
之後設定一下使用者名稱密碼就可以完成並登入了:
一鍵部署nginx反向代理Tomcat叢集
目錄結構
平臺架構
user –> nginx –> tomcat(可能有n個) –> mysql
docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 82:80
networks:
- lnmt
volumes:
- ./webapps:/opt/webapps
tomcat01:
hostname: tomcat01
build: ./tomcat
networks:
- lnmt
volumes:
- /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
- ./webapps:/usr/local/apache-tomcat-8.0.46/webapps
tomcat02:
hostname: tomcat02
build: ./tomcat
networks:
- lnmt
volumes:
- /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
- ./webapps:/usr/local/apache-tomcat-8.0.46/webapps
mysql:
hostname: mysql
image: mysql:5.6
ports:
- 3307:3306
networks:
- lnmt
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: db
MYSQL_USER: user
MYSQL_PASSWORD: user123
networks:
lnmt:
在nginx的配置檔案中,設定了一個負載均衡策略:
upstream www.example.com {
#ip_hash;
server tomcat01:8080;
server tomcat02:8080;
}
建立專案
首先下載jdk到當前目錄下,以便容器引用
然後將jdk包放到/usr/local下
docker-compose -f docker-compose.yml up -d
訪問測試
首先檢視容器的狀態:
然後通過瀏覽器訪問82埠應該看見如下頁面: