第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

docker compose 配置文件指令詳解

上一節(jié)我們快速體驗(yàn)了 Docker Compose,本節(jié)我們來學(xué)習(xí)如何編寫和使用 Docker Compose。

Docker Compose 的配置文件是一個基于 YAML 格式的文件。與 Dockerfile 采用 Dockerfile 作為默認(rèn)文件名一樣,Docker Compose 的配置文件也有一個缺省的文件名,就是 docker-compose.yml。

Docker Compose 將所管理的容器分為三層,分別是工程(project)、服務(wù)(service)、容器(container),Docker Compose 定義了一個工程,一個工程包含多個服務(wù),每個服務(wù)中定義了容器運(yùn)行的鏡像、參數(shù)、依賴,一個服務(wù)可包括多個容器實(shí)例。

1. 梳理工程中各個服務(wù)和容器的關(guān)系

Docker Compose配置文件有多個層級,直接學(xué)習(xí)指令不便于理解,通過一個熟悉的例子來掌握它是個更好的辦法。

以先前的配置文件為例,從Docker Compose的角度看,多個互相關(guān)聯(lián)的容器構(gòu)成了一個工程。這個工程中包含應(yīng)用服務(wù)app和數(shù)據(jù)緩存服務(wù)cache。

  • 緩存服務(wù)cache包含redis容器,它提供給工程中的其他容器redis服務(wù)。

  • 應(yīng)用服務(wù)app中包含我們自定義的Dockerfile構(gòu)建生成的容器,容器的運(yùn)行依賴redis服務(wù)。

Tips: 需要注意的是,先前借用宿主機(jī)網(wǎng)絡(luò)直接進(jìn)行容器通信過于簡單粗暴。我們只需要對外暴露flask 應(yīng)用的 5000 端口就足夠了,因此在 Docker Compose 容器編排中,需要維護(hù)額外的 Docker 網(wǎng)絡(luò),來處理這個工程中各容器通信。

2. 詳解配置指令

這里是上一節(jié)中使用的 Docker Compose 配置文件,它包含許多內(nèi)容,從每個容器的各個細(xì)節(jié)控制,到網(wǎng)絡(luò)、數(shù)據(jù)卷等的定義。

本節(jié)我們加入了注釋來快速了解它。

# 指定配置文件的版本號
version: "3.8"

# 服務(wù)
services:
	# 服務(wù)名稱cache
    cache:
     # 標(biāo)明構(gòu)建的鏡像
      image: redis:6.0.5
      # 生成的容器名稱
      container_name: my_redis
      # 指定網(wǎng)絡(luò)
      networks:
          - mynetwork
      # 設(shè)定掛載
      volumes:
          - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
      # 容器啟動后執(zhí)行命令
      command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    # 服務(wù)名稱app 
    app:
      # 構(gòu)建鏡像
      build:
          # 指定上下文
          context: .
          # 指定構(gòu)建腳本
          dockerfile: ./Dockerfile-multi-stage
      # 生成的容器名稱
      container_name: my_hello
      # 指定網(wǎng)絡(luò)
      networks:
          - mynetwork
      # 配置環(huán)境變量
      environment:
          - REDIS_HOST=my_redis
      # 指名容器依賴關(guān)系
      depends_on:
          - cache
      # 宿主機(jī)與容器端口映射
      ports:
          - "5000:5000"

# 網(wǎng)絡(luò)配置,與services在同一層級,注意書寫格式對齊
networks:
  # 標(biāo)識自定義的網(wǎng)絡(luò),對應(yīng)容器中指定的網(wǎng)絡(luò)的名稱
  mynetwork:
   # 在容器網(wǎng)路中展示的名稱
    name: my_network
    # 網(wǎng)絡(luò)驅(qū)動類型
    driver: bridge

基本的結(jié)構(gòu)示意圖如下:
圖片描述

接下來,我們認(rèn)識一下這個例子中出現(xiàn)的一些常用指令:

2.1 version

版本號標(biāo)識我們定義的 docker-compose.yml 文件內(nèi)容所采用的版本,目前 Docker Compose 的配置文件已經(jīng)迭代至了第三版,其所支持的功能也越來越豐富,建議使用最新的版本來定義。對照表如下:

Compose 配置文件版本 Docker 版本
3.8 19.03.0+
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 service

在 Docker Compose 把 service 作為配置的最小單元。使用時,我們首先要為每個服務(wù)定義一個名稱,用以區(qū)別不同的服務(wù)。在這個例子里,cache、redis 就是服務(wù)的名稱。雖然看上去每個 service 里的配置內(nèi)容就像是在配置單個容器,但其實(shí) service 代表的是一個應(yīng)用集群的配置,這個部分我們會在后續(xù)的實(shí)戰(zhàn)環(huán)節(jié)接觸到。

2.3 image

類似于Dockerfile中的FROM指令。需要注意,一定要注明鏡像的具體版本號,不要使用latest版本(不標(biāo)明版本即為latest),不同的執(zhí)行時間,latest指代的鏡像會發(fā)生改變。準(zhǔn)確執(zhí)行唯一指定的容器才能使得整個工程正確運(yùn)行。

2.4 build

build另一種指定鏡像的方式,通過 build 這個配置我們能夠直接采用 Dockerfile 來構(gòu)建鏡像,定義構(gòu)建的環(huán)境目錄。

如果我們通過這種方式指定鏡像,那么 Docker Compose 先會幫助我們執(zhí)行鏡像的構(gòu)建,之后再通過這個鏡像啟動容器。Docker Compose 我們能夠指定更多的鏡像構(gòu)建參數(shù),例如 Dockerfile 的文件名,構(gòu)建上下文,構(gòu)建參數(shù)等等。

此外,與image指令類似,我們希望Dockerfile的構(gòu)建也是唯一可靠的,因此之前Dockerfile的寫法也是不夠穩(wěn)定的,請讀者自行在Dockerfile中的鏡像和依賴上標(biāo)明合適的版本號。

2.5 container_name

指定容器名稱,如果不指定,會以<項(xiàng)目名稱><服務(wù)名稱><序號>。其中項(xiàng)目名稱默認(rèn)是當(dāng)前工作目錄的名字。

2.6 command

例如上面的配置里,我們希望修改 Redis 的啟動命令,加入配置文件以便對 Redis 服務(wù)進(jìn)行配置,那么我們可以直接通過 command 配置來修改。command會覆蓋鏡像中的CMD指令。

2.7 depends_on

在上面的例子里,我們的 app 依賴 cache,使用 depends_on 這個配置項(xiàng),列出這個服務(wù)所有依賴的其他服務(wù)即可。在 Docker Compose 為我們啟動項(xiàng)目的時候,會檢查所有依賴,按照依賴指定的啟動順序來依次啟動容器。

2.8 volumes

在 Docker Compose 里定義文件掛載的方式與 Docker里也并沒有太多的區(qū)別,使用 volumes 配置可以像 docker 的 -v 選項(xiàng)一樣來指定外部掛載和數(shù)據(jù)卷掛載。在這個例子中,我們將redis的配置文件掛載到容器中。

2.9 ports

ports 這個配置項(xiàng),它是用來定義端口映射的。我們可以利用它進(jìn)行宿主機(jī)與容器端口的映射,這個配置與 docker 中 -p 選項(xiàng)的使用方法是近似的。

2.10 environment:

設(shè)置環(huán)境變量, 類似于 Dockerfile 的 ENV。

2.11 networks

網(wǎng)絡(luò)也是容器間互相訪問的橋梁,網(wǎng)絡(luò)的配置對于多個容器組成的應(yīng)用系統(tǒng)來說也是非常重要的。在 Docker Compose 里,我們可以為整個應(yīng)用系統(tǒng)設(shè)置一個或多個網(wǎng)絡(luò)。

要使用網(wǎng)絡(luò),我們必須先聲明網(wǎng)絡(luò)。聲明網(wǎng)絡(luò)的配置同樣獨(dú)立于 services 存在,是位于根配置下的 networks 配置。在上面的例子里,我們聲明了網(wǎng)絡(luò)mynetwork,在服務(wù)的配置中,直接使用networks指定mynetwork即可。

2.12 name

networks下的name的作用類似于 container_name指令,在這個例子中,mynetwork 創(chuàng)建的 docker 網(wǎng)絡(luò)被命名為 my_network, 使用命令 docker network ls 可以查看到它。

3.小結(jié)

本節(jié)帶領(lǐng)大家認(rèn)識了配置文件的基本結(jié)構(gòu)和常用指令,這些指令是我們構(gòu)建 Docker Compose 工程中最最常用的,是指令當(dāng)中的“骨干成員”,請務(wù)必要掌握它們的基本用法。