附005.Docker Compose文件详解
生活随笔
收集整理的這篇文章主要介紹了
附005.Docker Compose文件详解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一 Docker Compose文件簡(jiǎn)介
compose文件使用yml格式,主要分為了四個(gè)區(qū)域:- version:用于指定當(dāng)前docker-compose.yml語(yǔ)法遵循哪個(gè)版本
- services:服務(wù),在它下面可以定義應(yīng)用需要的一些服務(wù),每個(gè)服務(wù)都有自己的名字、使用的鏡像、掛載的數(shù)據(jù)卷、所屬的網(wǎng)絡(luò)、依賴(lài)哪些其他服務(wù)等等。
- networks:應(yīng)用的網(wǎng)絡(luò),在它下面可以定義應(yīng)用的名字、使用的網(wǎng)絡(luò)類(lèi)型等。
- volumes:數(shù)據(jù)卷,在它下面可以定義數(shù)據(jù)卷,然后掛載到不同的服務(wù)下去使用。
二 Docker Compose文件詳解
2.1 version字段
用于指定當(dāng)前compose文件語(yǔ)法遵循哪個(gè)版本,Compose文件版本支持特定的Docker版本列表如下:| Compose文件格式 | Docker Engine版本 |
| 3.7 | 18.06.0+ |
| 3.6 | 18.02.0+ |
| 3.5 | 17.12.0+ |
| 3.4 | 17.09.0+ |
| 3.3 | 17.06.0+ |
| 3.2 | 17.04.0+ |
| 3.1 | 1.13.1+ |
| 3.0 | 1.13.0+ |
| 2.4 | 17.12.0+ |
| 2.3 | 17.06.0+ |
| 2.2 | 1.13.0+ |
| 2.1 | 1.12.0+ |
| 2.0 | 1.10.0+ |
| 1.0 | 1.9.1.+ |
2.2 services區(qū)域
所有服務(wù)的定義都是定義在services區(qū)域中,services常用的配置項(xiàng)如下: image:指定要啟動(dòng)容器的映像。可以是一個(gè)repository/tag或鏡像ID來(lái)表明。 示例: image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd 提示:image可以是本地也可以是遠(yuǎn)程的,如果本地不存在,compose會(huì)嘗試pull下來(lái),肉使用了build手動(dòng)構(gòu)建鏡像,則使用指定的選項(xiàng)構(gòu)建它,并使用指定的標(biāo)簽標(biāo)記它。 build:該參數(shù)指定Dockerfile文件的路徑,compose會(huì)通過(guò)Dockerfile構(gòu)建并生成鏡像,然后使用該鏡像 示例: 1 version: '3' 2 services: 3 webapp: 4 build: ./dir 5 image: webapp:tag 提示:如果在構(gòu)建鏡像的時(shí)候你指定相關(guān)名字和tag,則生成指定的鏡像和tag。 command:重寫(xiě)默認(rèn)的命令,即指定啟動(dòng)容器的命令。 示例: command: bundle exec thin -p 3000 或 command: ["bundle", "exec", "thin", "-p", "3000"] links:鏈接到其他服務(wù)中的容器,可以指定服務(wù)名稱(chēng)和這個(gè)鏈接的別名,或者只指定服務(wù)名稱(chēng)。 示例: 1 web: 2 links: 3 - db 4 - db:database 5 - redis 此時(shí),在容器內(nèi)部,會(huì)在/etc/hosts文件中用別名創(chuàng)建幾個(gè)條目,如下: 1 172.17.2.100 db 2 172.17.2.100 database 3 172.17.2.100 redis external_links:鏈接到compose外部啟動(dòng)的容器,特別是對(duì)于提供共享和公共服務(wù)的容器。在指定容器名稱(chēng)和別名時(shí),external_links遵循著和links相同的語(yǔ)義用法。 示例: 1 external_links: 2 - redis_1 3 - project_db_1:mysql 4 - project_db_1:postgresql ports:暴露端口,指定宿主機(jī)到容器的端口映射,或者只指定容器的端口,則表示映射到主機(jī)上的隨機(jī)端口。 提示:注意:以HOST:CONTAINER格式映射端口時(shí),使用低于60的容器端口時(shí)可能會(huì)遇到錯(cuò)誤的結(jié)果,因?yàn)閅AML會(huì)將格式xx:yy中的數(shù)字解析為base-60值。因此,我們建議始終將端口映射明確指定為字符串。 示例: 1 ports: 2 - "3000" 3 - "3000-3005" 4 - "8000:8000" 5 - "9090-9091:8080-8081" 6 - "49100:22" 7 - "127.0.0.1:8001:8001" 8 - "127.0.0.1:5000-5010:5000-5010" 9 - "6060:6060/udp" 示例2: 1 ports: 2 - target: 80 3 published: 8080 4 protocol: tcp 5 mode: host 解釋:長(zhǎng)格式語(yǔ)法允許配置無(wú)法以簡(jiǎn)短形式表示的其他字段。- target:容器內(nèi)的端口
- published:公開(kāi)暴露的港口
- protocol:端口協(xié)議(tcp或udp)
- mode:host用于在每個(gè)節(jié)點(diǎn)上發(fā)布主機(jī)端口,或者ingress用于負(fù)載平衡的群集模式端口。
- docker-compose up:以依賴(lài)順序啟動(dòng)服務(wù),在以上示例中,db和redis之在web之前啟動(dòng)。
- docker-compose up SERVICE:自動(dòng)包含SERVICE依賴(lài)項(xiàng)。在以上示例中,docker-compose up web還創(chuàng)建并啟動(dòng)db和redis。
- condition:其中之一none,on-failure或any(默認(rèn):) any。
- delay:重新啟動(dòng)嘗試之間等待的時(shí)間,指定為持續(xù)時(shí)間(默認(rèn)值:0)。
- max_attempts:在放棄之前嘗試重新啟動(dòng)容器的次數(shù)(默認(rèn)值:永不放棄)。如果在配置中未成功重新啟動(dòng) window,則此嘗試不會(huì)計(jì)入配置的max_attempts值。例如,如果max_attempts設(shè)置為“2”,并且第一次嘗試時(shí)重新啟動(dòng)失敗,則可能會(huì)嘗試重新啟動(dòng)兩次以上。
- window:在決定重啟是否成功之前等待多長(zhǎng)時(shí)間,指定為持續(xù)時(shí)間(默認(rèn)值:立即決定)。
- parallelism:一次回滾的容器數(shù)。如果設(shè)置為0,則所有容器同時(shí)回滾。
- delay:每個(gè)容器組的回滾之間等待的時(shí)間(默認(rèn)為0)。
- failure_action:如果回滾失敗該怎么辦。一個(gè)continue或pause(默認(rèn)pause)
- monitor:每次更新任務(wù)后的持續(xù)時(shí)間以監(jiān)視失敗(ns|us|ms|s|m|h)(默認(rèn)為0)。
- max_failure_ratio:回滾期間容忍的失敗率(默認(rèn)值為0)。
- order:回滾期間的操作順序。其中之一stop-first(舊任務(wù)在啟動(dòng)新任務(wù)之前停止),或者start-first(首先啟動(dòng)新任務(wù),并且正在運(yùn)行的任務(wù)暫時(shí)重疊)(默認(rèn)stop-first)。
- parallelism:一次更新的容器數(shù)。
- delay:更新一組容器之間的等待時(shí)間。
- failure_action:更新失敗時(shí)的行為。其中一個(gè)continue,rollback或者pause (默認(rèn):pause)。
- monitor:每次更新任務(wù)后的持續(xù)時(shí)間以監(jiān)視失敗(ns|us|ms|s|m|h)(默認(rèn)為0)。
- max_failure_ratio:更新期間容忍的故障率。
- order:更新期間的操作順序。其中一個(gè)stop-first(舊任務(wù)在啟動(dòng)新任務(wù)之前停止),或者start-first(首先啟動(dòng)新任務(wù),并且正在運(yùn)行的任務(wù)暫時(shí)重疊)(默認(rèn)stop-first)注意:僅支持v3.4及更高版本。
2.3 networks區(qū)域
網(wǎng)絡(luò)決定了服務(wù)之間以及服務(wù)和外界之間如何去通信,在執(zhí)行docker-compose up的時(shí)候,docker會(huì)默認(rèn)創(chuàng)建一個(gè)默認(rèn)網(wǎng)絡(luò),創(chuàng)建的服務(wù)也會(huì)默認(rèn)的使用這個(gè)默認(rèn)網(wǎng)絡(luò)。服務(wù)和服務(wù)之間,可以使用服務(wù)的名字進(jìn)行通信,也可以自己創(chuàng)建網(wǎng)絡(luò),并將服務(wù)加入到這個(gè)網(wǎng)絡(luò)之中,這樣服務(wù)之間可以相互通信,而外界不能夠與這個(gè)網(wǎng)絡(luò)中的服務(wù)通信,可以保持隔離性。 提示:注意:您的應(yīng)用程序網(wǎng)絡(luò)的名稱(chēng)基于“項(xiàng)目名稱(chēng)”,該名稱(chēng)基于其所在目錄的名稱(chēng)。您可以使用--project-name參數(shù)或COMPOSE_PROJECT_NAME環(huán)境變量覆蓋項(xiàng)目名稱(chēng),如當(dāng)前的目錄為myapp,期docker-compose.yml如下: 1 version: "3" 2 services: 3 web: 4 build: . 5 ports: 6 - "8000:8000" 7 db: 8 image: postgres 9 ports: 10 - "8001:5432" 運(yùn)行時(shí)docker-compose up,則:2.4 volumes區(qū)域
可以在Compose file文件上聲明卷,同時(shí)也可以在本區(qū)域創(chuàng)建volumes_from,以便在多個(gè)服務(wù)中重用卷。 示例: 1 version: "3" 2 services: 3 db: 4 image: db 5 volumes: 6 - data-volume:/var/lib/db 7 backup: 8 image: backup-service 9 volumes: 10 - data-volume:/var/lib/backup/data 11 volumes: 12 data-volume: 提示:volumes可參考:https://docs.docker.com/compose/compose-file/#specifying-byte-values轉(zhuǎn)載于:https://www.cnblogs.com/itzgr/p/10041249.html
總結(jié)
以上是生活随笔為你收集整理的附005.Docker Compose文件详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue2中的keep-alive使用总结
- 下一篇: 1.1好素数