Docker Compose file


1.  Service configuration

Compose file 是一個YAML文件,用於定義 servicesnetworks, 和 volumes。其默認路徑是./docker-compose.yml

一個service定義包含了這個服務啟動的所有容器的配置,這個操作看起來很像是傳遞命令行參數給docker container create命令。同樣,network和volume定義類似於docker network createdocker volume create命令。

docker container create 一樣,在Dockerfile中指定的選項(比如:CMDEXPOSEVOLUMEENV等)也是一樣的,你不需要在docker-compose.yml中再次指定它們。

1.1.  build

應用於構建時的配置選項

build指定了構建上下文路徑

或者,也可以用一個包含context和可選的dockerfileargs的對象類指定

如果在指定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中,ARGFROM指令之前,那么在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>
  • uidgid  :被掛載到容器的文件的所有者和所屬組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  按照依賴順序停止服務

下面的例子中,dbredis會先於web啟動,啟動web的時候也會創建並啟動dbredisweb停止之前會先停止dbredis

注意:depends_on不會等待dbredis啟動好了再啟動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/

https://docs.docker.com/compose/reference/

http://permissions-calculator.org

https://yaml.org

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM