1. Service configurationmysql
Compose file 是一個YAML文件,用於定義 services, networks, 和 volumes。其默認路徑是./docker-compose.ymlgit
一個service定義包含了這個服務啓動的全部容器的配置,這個操做看起來很像是傳遞命令行參數給docker container create命令。一樣,network和volume定義相似於docker network create 和 docker volume create命令。web
與 docker container create 同樣,在Dockerfile中指定的選項(好比:CMD、 EXPOSE、 VOLUME、 ENV等)也是同樣的,你不須要在docker-compose.yml中再次指定它們。redis
1.1. buildsql
應用於構建時的配置選項docker
build指定了構建上下文路徑
數據庫
或者,也能夠用一個包含context和可選的dockerfile及args的對象類指定緩存
若是在指定build的同時還指定了image,那麼將會用指定的鏡像來構建網絡
1.2. context工具
指向包含Dockerfile目錄的路徑,或者指向git倉庫的url
若是這個值是相對路徑,那麼它相對的是compose file所在的位置(PS:其實就是當前目錄)
1.3. Dockerfile
你也能夠用Dockerfile來構建,不過這個時候必須指定context
(PS:dockerfile是用來生成鏡像的,也就是說構建的時候能夠從image構建,也能夠從dockerfile構建,是同樣的)
1.4. args
添加構建參數,這些環境變量只能在構建過程當中訪問
首先,在Dockerfile中定義變量
而後,在構建的時候給這些變量賦值
或者,下面這種寫法也是能夠的
注意:若是在Dockerfile中,ARG在FROM指令以前,那麼在FROM指令下ARG不可用
你也能夠在構建參數中省略它們的值,這種狀況下會從Compose運行的環境中取值(PS:其實就是環境變量)
1.5. cache_from
緩存的鏡像列表
1.6. shm_size
爲這個構建的容器設置/dev/shm分區的大小
1.7. configs
受權某個服務能夠訪問它下面配置的configs,支持兩種語法
1.7.1. 短語法
短語法只指定config名稱,受權容器能夠訪問config,並將其掛載到該容器下的/<config_name>
下面的例子受權redis服務訪問my_config和my_other_config配置。my_config的值設置的是./my_config.txt,而my_other_config的值指定的是外部資源,這就意味着該值已經被定義在Docker中了。
1.7.2. 長語法
長語法提供了更細粒度的控制
下面這個例子將在容器下設置my_config和redis_config,設置權限是0440,全部者和所屬組都是103,redis服務不能夠訪問my_other_config配置
1.8. container_name
自定義容器名稱,而不是用默認生成的名稱
1.9. depends_on
表示服務之間的依賴關係,服務依賴關係致使如下行爲:
下面的例子中,db和redis會先於web啓動,啓動web的時候也會建立並啓動db和redis,web中止以前會先中止db和redis
注意:depends_on不會等待db和redis啓動好了再啓動web
1.10. deploy
只有在集羣方式部署的時候這個配置纔有效
1.10.1. mode
global(每一個集羣節點只有一個容器) 或者 replicated (指定數量的容器)。默認是 replicated
1.11. env_file
添加一個環境變量文件,能夠是單個值或者一個列表
若是同一個變量出如今多個文件中,則後者覆蓋前者
1.12. environment
添加一個環境變量,能夠覆蓋env_file中同名的變量值
1.13. expose
在不將端口發佈到主機的狀況下公開端口
1.14. image
指定容器從哪一個鏡像啓動,能夠是鏡像ID,也能夠是鏡像tag
1.15. network_mode
網絡模式
1.16. ports
端口,兩種語法
短語法
長語法
1.17. restart
重啓策略,默認是no
1.18. ulimits
覆蓋容器默認的ulimits
1.19. volumes
掛載主機的路徑或volumes名稱
你能夠爲單個服務掛載一個主機路徑,這個時候就沒有定義頂級的volumes了。可是,若是你但願多個服務複用一個volumes,那麼這個時候就要定義在頂級了。
短語法
指定主機上的路徑(HOST:CONTAINER),或者一個訪問模式(HOST:CONTAINER:ro)
(PS:稍微解釋一下,好比/opt/data:/var/lib/mysql表示掛載到主機的路徑是/opt/data,掛載到容器的路徑是/var/lib/mysql,其實掛載能夠理解爲映射)
長語法
1.20. 指定時長與字節值
時長支持的單位:us,ms,s,m,h
字節大小支持的單位:b,k,m,g 或者 b,kb,mb,gb
2. Volume configuration
下面的例子展現了兩個服務,一個數據庫的數據目錄以一個volumn的形式與另外一個服務共享,以致於它能夠週期性的備份數據:
頂級volumns能夠是空的,此時它使用Docker引擎默認提供的驅動(大多數狀況下是local)來配置。你也能夠指定下列key
3. 示例
4. 文檔
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/compose/reference/