Docker-Compose
Docker Compose
Docker Compose是一個用來定義和運行復雜應用的docker工具。
可以通過使用Compose在一個文件中定義一個多容器應用蛤克,使用docker-compose up命令來啟動應用抗蠢。
Compose的指令
- build 構建或重建服務
- help 幫助指令
- kill 結束容器
- logs 記錄容器輸出日志
- port 打印容器綁定的端口
- ps 列出容器列表
- pull 從倉庫拉取服務鏡像
- restart 重啟
- rm 刪除已經(jīng)停止的容器
- run 運行容器
- scale 設置服務的容器數(shù)目
- stop 停止
- start 開啟
- up 創(chuàng)建并啟動容器
以上都是compose的一些基礎指令,但是Docker Compose最為重要的是docker-compose.yml配置的設置秉馏。
docker-compose.yml配置文件
一份標準的配置文件由version、services、networks三部分組成自沧,其中最關鍵的是services和networks。
以下介紹services的書寫規(guī)則:
一树瞭、image
services:
db:
image: "mysql:5.7.15"
在services標簽下的第二級標簽db是用戶給當前這個服務自定義的名字拇厢。
image是指定服務的鏡像名稱或者鏡像ID(如果鏡像在本地不存在,就會到倉庫中去pull)晒喷。
二孝偎、build
services除了可以基于指定的image,還可以基于一份Dockerfile凉敲,在docker-compose up啟動的時候執(zhí)行構建衣盾。
services:
nginx:
build: /path/nginx
build就是用來指定Dockerfile所在的文件路徑,這里的路徑可以是絕對路徑亦可是相對路徑爷抓。
注:
如果同時指定了image和build兩個標簽势决,那么Compose會在構建鏡像時使用iamge的名稱來命名。
三蓝撇、command
使用command可以覆蓋容器啟動后默認執(zhí)行的命令果复。
如:
command: bundle exec thin -p 3000
# 或
command: [bundle,exec,thin,-p,3000]
四、container_name
container_name: app #指定容器名稱
五渤昌、depends_on
一般項目容器啟動的順序是有要求的虽抄,如果直接從上到下啟動容器走搁,必然會因為容器依賴問題而啟動失敗。
為了避免這一情況迈窟,可使用depends_on朱盐。
depends_on標簽是用來規(guī)定容器啟動的先后順序。
如:
version: ’2‘
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
以上配置中的depends_on規(guī)定的啟動順序為:db菠隆、redis兵琳、web。
六骇径、tmpfs
掛載臨時目錄到容器內(nèi)部躯肌,與run的參數(shù)效果一樣。
tmpfs: /run
tmpfs:
- /run
- /tmp
七破衔、entrypoint
與Dockerfile中的ENTRYPOINT一樣清女,在容器啟動時有效。
entrypoint: /usr/sbin/nginx #啟動時運行nginx
八晰筛、expose
與Dockerfile中的EXPOSE一樣嫡丙,用于暴露接口。
expose:
- "3500"
- "5000"
九读第、links
解決容器鏈接問題曙博。
links:
- db
- redis
以上配置是指,當前服務將要鏈接數(shù)據(jù)庫和redis方可正常運行怜瞒。
十父泳、ports
映射端口。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注:
當使用HOST:CONTAINER格式來映射端口時吴汪,如果你使用的容器端口小于60你可能會得到錯誤得結果惠窄,因為YAML將會解析xx:yy這種數(shù)字格式為60進制。
建議采用字符串格式漾橙。
十一杆融、volumes
掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器,可以直接使用 [HOST:CONTAINER] 這樣的格式霜运,或者使用 [HOST:CONTAINER:ro] 這樣的格式脾歇,后者對于容器來說,數(shù)據(jù)卷是只讀的觉渴,這樣可以有效保護宿主機的文件系統(tǒng)介劫。
volumes:
# 指定一個文件目錄徽惋,用來存放容器數(shù)據(jù)案淋。
# $PWD 表示當前路徑
- $PWD/data:/var/lib/mysql
以上是個人感覺相對重要的標簽,其它詳解险绘。
實例
version: '2'
# 指定網(wǎng)絡模式
networks:
ghost:
# 配置服務
services:
ghost-app:
# 使用當前路徑下ghost中的Dockerfile構建容器
build: ghost
networks:
- ghost
# 指定當前服務依賴服務
depends_on:
- db
# 端口映射
ports:
- "2368:2368"
nginx:
build: nginx
networks:
- ghost
depends_on:
- ghost-app
ports:
- "80:80"
db:
image: "mysql:5.7.15"
networks:
- ghost
# 配置環(huán)境變量
environment:
MYSQL_ROOT_PASSWORD: mysqlroot
MYSQL_USER: ghost
MYSQL_PASSWORD: ghost
# 設置數(shù)據(jù)路徑踢京,容器銷毀任然有效
volumes:
- $PWD/data:/var/lib/mysql
ports:
- "3306:3306"