1. Service configuration
Compose file 是一個YAML檔案,用於定義 services, networks, 和 volumes。其預設路徑是./docker-compose.yml
一個service定義包含了這個服務啟動的所有容器的配置,這個操作看起來很像是傳遞命令列引數給docker container create命令。同樣,network和volume定義類似於docker network create 和 docker volume create命令。
與 docker container create 一樣,在Dockerfile中指定的選項(比如:CMD、 EXPOSE、 VOLUME、 ENV等)也是一樣的,你不需要在docker-compose.yml中再次指定它們。
1.1. build
應用於構建時的配置選項
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. 長語法
長語法提供了更細粒度的控制
- source :config的名稱
- target :被掛載到容器後的檔名稱,預設是/<source>
- uid和gid :被掛載到容器的檔案的所有者和所屬組ID
- mode :被掛載到容器中的檔案的許可權(PS:如果你不熟悉UNIX的許可權模式,可以用這個工具 http://permissions-calculator.org)
下面這個例子將在容器下設定my_config和redis_config,設定許可權是0440,所有者和所屬組都是103,redis服務不可以訪問my_other_config配置
1.8. container_name
自定義容器名稱,而不是用預設生成的名稱
1.9. depends_on
表示服務之間的依賴關係,服務依賴關係導致以下行為:
- docker-compose up 按照依賴順序啟動服務
- docker-compose up SERVICE 自動包含服務的依賴
- docker-compose stop 按照依賴順序停止服務
下面的例子中,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,其實掛載可以理解為對映)
長語法
- type :掛載型別(volume, bind,tmpfs)
- source :掛載的源
- target :volume被掛載到容器中的路徑
- read_only :設定只讀
- propagation :bind的額外選項
- nocopy :volume的額外選項,表示當volume建立的時候是否禁止從容器上覆制資料
- size :tmpfs的額外選項,表示掛載的位元組大小
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/
http://permissions-calculator.org