精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊 Docker-Compose 進階篇

云計算 云原生
configs 和 secrets 是 Docker Compose 和 Docker Swarm 中用于管理容器配置和敏感數據的兩個不同的功能。

一、概述

docker-compose 項目是docker官方的開源項目, 負責實現對docker容器集群的快速編排,來輕松高效的管理容器,定義運行多個容器。

  • docker-compose將所管理的容器分為三層, 分別是工程(project),服務(service)以及容器(containner)
  • docker-compose運行目錄下的所有文件(docker-compose.yml文件、extends文件或環境變量等)組成一個工程,如無特殊指定,工程名即為當前目錄名。
  • 一個工程當中,可以包含多個服務,每個服務中定義了容器運行的鏡像、參數、依賴。
  • 一個服務中可以包括多個容器實例,docker-compose并沒有解決負載均衡的問題。因此需要借助其他工具實現服務發現及負載均衡,比如consul。
  • docker-compose?的工程配置文件默認為 docker-compose.yml。可以通過環境變量COMPOSE_FILE -f 參數自定義配置文件,其自定義多個有依賴關系的服務及每個人服務運行的容器。

官方文檔:https://docs.docker.com/compose/

GitHub:https://github.com/docker/compose/releases/

以前也寫過一篇關于docker compose基礎的文章,有興趣的可以先查閱看看:Docker三劍客之Compose

圖片

二、Compose 和 Docker 兼容性

Compose 文件格式有多個版本:1、2、2.x、和 3.x。下面的表格是 Compose 文件所支持的指定的 docker 發行版:

圖片

三、安裝 docker

# 安裝yum-config-manager配置工具
yum -y install yum-utils

# 建議使用阿里云yum源:(推薦)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安裝docker-ce版本
yum install -y docker-ce
# 啟動并開機啟動
systemctl enable --now docker
docker --version

四、安裝 docker-compose

官方安裝地址教程:https://docs.docker.com/compose/install/other/

curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

chmod +x /usr/bin/docker-compose
docker-compose --version

五、環境變量

Docker Compose 允許你使用多種方法為服務設置環境變量。這些環境變量可以用來配置你的應用程序或將敏感信息傳遞給你的容器。

下面是一些設置 Docker Compose 環境變量的方法:

1)在 docker-compose.yml 文件中設置環境變量

你可以在 docker-compose.yml? 文件中為每個服務設置環境變量。在服務配置中,使用 environment 關鍵字,并在其中列出需要設置的環境變量和其值。

services:
web:
image: nginx
environment:
MY_VAR: my_value

2)從 .env 文件中讀取環境變量

你可以將環境變量存儲在一個 .env? 文件中,并讓 Docker Compose 讀取它。在 docker-compose.yml? 文件中,使用 env_file? 關鍵字并指定 .env 文件的路徑。

services:
web:
image: nginx
env_file:
- .env

3)使用 shell 環境變量

你也可以在啟動 docker-compose 命令時,使用 shell 環境變量傳遞環境變量值。例如:

$ export MY_VAR=my_value
$ docker-compose up

在 docker-compose.yml? 文件中使用 ${MY_VAR} 語法來引用 shell 環境變量。

services:
web:
image: nginx
environment:
MY_VAR: ${MY_VAR}

使用環境變量可以使你的應用程序更具靈活性,并且可以方便地管理敏感信息。

六、編排中的字段詳解

在 Docker Compose 編排文件中,有一些重要的字段需要了解:

1)version

version? 字段指定了 Docker Compose 編排文件的版本。當前最新版本是 3。

version: '3'

2)services

services 字段指定了在 Docker Compose 編排中要運行的服務。每個服務都有一個名稱,并指定要使用的鏡像和容器的配置選項。以下是一個簡單的 services 配置的示例:

services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"

3)build 與 image

1、build

build 字段允許在 Docker Compose 編排中指定 Dockerfile 的位置,從而可以使用 Docker Compose 構建鏡像。例如,以下是使用本地 Dockerfile 的示例:

services:
web:
build: .

也可以指定一個包含 Dockerfile 的目錄:

services:
web:
build: ./my-web-app

2、image

image 字段指定要使用的 Docker 鏡像。例如:

services:
web:
image: nginx

【溫馨提示】build 和 image 二選一即可,也可以同時寫,但是一般只選擇image吧。

version: '3.8'
services:
web:
build: ./web
image: myapp/web:latest

上面的配置指定了服務名稱為web,Dockerfile路徑為./web,鏡像名稱為 myapp/web?,標簽為 latest?。在運行docker-compose build? 命令時,會自動構建名為 myapp/web:latest 的鏡像。

4)networks

networks 字段指定了要使用的網絡。默認情況下,Docker Compose 創建一個名為 default 的網絡。以下是一個使用自定義網絡的示例:

networks:
my-network:
driver: bridge

5)volumes

volumes 字段指定了要使用的數據卷。以下是一個使用數據卷的示例(下面會細講):

volumes:
my-volume:
driver: local

6)environment 與 environment_file

1、environment

environment 字段指定了要設置的環境變量。以下是一個使用環境變量的示例:

environment:
MY_VAR: my_value

2、environment_file

environment_file:指定從文件中讀取環境變量。

environment_file: .env

7)ports 與 expose

1、ports

ports 字段指定了要宿主機映射到容器的端口(宿主機端口:容器端口)。以下是一個使用端口映射的示例:

ports:
- "8080:80"

2、expose

expose 字段是用于在 Docker 容器內部暴露端口的選項,可以讓其他容器連接到這些端口,但不會將它們映射到 Docker 主機上。

在 docker-compose.yml 文件中使用 expose 選項來指定容器內部需要暴露的端口。例如,以下示例定義了一個 web 服務,它暴露了 8000 和 8080 端口:

version: '3'
services:
web:
image: myapp:latest
expose:
- "8000"
- "8080"

當您使用 expose? 選項時,其他容器可以使用 Docker 的內部網絡進行連接。例如,如果您有另一個服務 worker,它需要連接到 web 服務的 8000 端口,則可以在 worker 服務的 docker-compose.yml 文件中使用 links 選項:

version: '3'
services:
worker:
image: myworker:latest
links:
- web

8)depends_on

depends_on 字段指定了服務之間的依賴關系。例如,如果 web 服務依賴于 db 服務,則可以使用以下示例:

depends_on:
- db

9)restart

Docker Compose 提供了幾種重啟策略,以便在容器出現故障時自動重啟它們。以下是可用的重啟策略:

  • no: 不重啟任何容器。如果容器停止,Compose 不會嘗試自動重啟它們。(默認策略)
  • always: 如果容器停止,Compose 將自動重啟它。(常用)
  • on-failure: 只有在容器因非 0 退出碼而停止時才會重啟。
  • unless-stopped: 除非手動停止,否則始終重啟容器。這相當于使用 docker run 命令時使用的 --restart=unless-stopped 標志。

這些策略可以在 docker-compose.yml 文件中通過 restart 鍵指定,例如:

version: '3'
services:
web:
image: myapp:latest
restart: always

這個示例使用 always 策略,這意味著如果 web 容器停止,Compose 將自動重啟它。

10)command

command 字段可以使用多種寫法來指定容器啟動時要執行的命令,具體取決于您的需求和偏好。以下是一些常見的寫法示例:

1、字符串形式

version: '3'
services:
web:
image: myapp:latest
command: python manage.py runserver 0.0.0.0:8000

在這個示例中,command 字段的值是一個字符串,表示要執行的命令和參數。

2、列表形式

version: '3'
services:
web:
image: myapp:latest
command:
- python
- manage.py
- runserver
- 0.0.0.0:8000

在這個示例中,command 字段的值是一個列表,每個元素都表示要執行的命令或參數。

3、Shell 命令形式

version: '3'
services:
web:
image: myapp:latest
# 兩種寫法
# command: sh -c "python manage.py runserver 0.0.0.0:8000"
command: ["sh","-c","python manage.py runserver 0.0.0.0:8000"]

4、使用環境變量形式

version: '3'
services:
web:
image: myapp:latest
environment:
- ENVIRONMENT=production
command: python manage.py runserver 0.0.0.0:${PORT}

在這個示例中,command 字段中的 ${PORT}? 將被替換為 web 服務的環境變量 PORT 的值。

11)healthcheck

healthcheck:指定容器健康檢查配置。

healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3

上面的例子中,配置容器健康檢查命令為 "curl -f http://localhost/health",每 30 秒檢查一次,超時時間為 10 秒,最多重試 3 次。

12)configs 與 secrets

1、configs

configs:指定容器使用的配置文件。

configs:
- source: my-config
target: /etc/nginx/conf.d/default.conf

上面的例子中,將名為 my-config 的配置文件復制到容器的 /etc/nginx/conf.d/default.conf 目錄下。

2、secrets

secrets:指定容器使用的機密數據。

secrets:
- db_password

13)hostname 與 container_name

hostname? 和 container_name 都是用來定義 Docker 容器的標識符,但是它們的含義不同。

1、hostname

hostname 用于設置容器的主機名,也就是在容器內部可以使用的名稱。例如,如果您在容器內部使用 ping hostname 命令,它將解析為容器的 IP 地址。可以使用以下格式設置主機名:

version: '3'
services:
web:
image: myapp:latest
container_name: myapp

在這個示例中,web 服務的容器主機名被設置為 myapp-container。

2、container_name

container_name 用于給容器命名,也就是在 Docker 主機上使用的名稱。可以使用以下格式設置容器名稱:

version: '3'
services:
web:
image: myapp:latest
container_name: myapp

在這個示例中,web 服務的容器名稱被設置為 myapp。

總之,hostname 和 container_name 都是用于定義容器的標識符,但是 hostname 用于容器內部的標識,container_name 用于 Docker 主機上的標識。

14)user

在 Docker Compose 中,可以使用 user 字段來指定容器中運行的進程的用戶和用戶組。它的語法與 docker run? 命令的 --user 選項類似,有以下三種形式:

1、user:group(推薦)

以 user 用戶和 group 用戶組的身份運行容器中的進程,例如:

version: "3"
services:
web:
image: nginx
user: nginx:nginx

2、uid:gid

以 uid 用戶 ID 和 gid 用戶組 ID 的身份運行容器中的進程,例如:

version: "3"
services:
web:
image: nginx
user: "1000:1000"

3、user

以 user 用戶的身份運行容器中的進程,例如:

version: "3"
services:
web:
image: nginx
user: nginx

需要注意的是,如果在 Docker Compose 中使用了 user 字段,則容器中的所有進程都將以指定的用戶身份運行,而不是默認的 root 用戶身份運行。這可以提高容器的安全性,避免在容器中使用 root 用戶造成潛在的安全風險。

15)deploy

deploy:指定服務部署配置。

deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: '256M'
reservations:
cpus: '0.25'
memory: '128M'

上面的例子中,配置服務的副本數量為 3,限制每個副本使用的 CPU 和內存資源,并保留一部分資源供其他服務使用。

七、port 和 expose 區別

ports? 和 expose 是兩個不同的 Docker Compose 字段,用于在容器中暴露端口。

  • ports 字段用于將容器內部的端口映射到宿主機上的端口,以便外部網絡可以通過宿主機上的端口與容器中運行的應用程序進行通信。這個字段的語法如下:
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"

這個例子中,容器中運行的 nginx 進程監聽的是容器內部的 80 端口,而 ports 字段將宿主機上的 8080 端口映射到了容器內部的 80 端口,這樣外部網絡就可以通過訪問宿主機上的 8080 端口來訪問容器中運行的 nginx 應用程序。

  • expose? 與 ports 不同的是,expose 字段僅僅是將容器內部的端口暴露給其他容器使用,而不是直接映射到宿主機上的端口。這個字段的語法如下:
version: "3"
services:
db:
image: mysql
expose:
- "3306"
web:
image: nginx
expose:
- "80"

這個例子中,db 和 web 兩個容器分別暴露了它們內部的 3306 和 80 端口,其他容器可以使用這些端口來與它們通信。但是,由于這些端口沒有被映射到宿主機上,因此外部網絡無法直接訪問它們。如果要從外部網絡訪問這些容器,需要使用 ports 字段將它們映射到宿主機上的端口。

八、configs 與 secrets 區別

configs? 和 secrets 是 Docker Compose 和 Docker Swarm 中用于管理容器配置和敏感數據的兩個不同的功能。它們的區別如下:

  • 用途不同:configs 用于管理容器應用程序的配置文件,例如 nginx 的配置文件、MySQL 的配置文件等,而 secrets 則用于管理敏感數據,例如數據庫的密碼、API 密鑰等。
  • 存儲位置不同:configs 存儲在 Docker 主機的文件系統中,可以是本地文件系統、NFS 文件系統或遠程 S3 存儲等,而 secrets 存儲在 Docker Swarm 的安全存儲中,該存儲是加密的、高度安全的,并且只能由授權的 Docker 服務和節點訪問。
  • 訪問方式不同:configs 可以通過文件掛載或 Docker Compose 文件中的 configs 字段來訪問,而 secrets 可以通過文件掛載、Docker Compose 文件中的 secrets 字段、Docker CLI 的 docker secret 命令或容器內部的文件系統來訪問。
  • 生命周期不同:configs 的生命周期是獨立于服務的,當服務停止時,配置文件仍然可以保留在主機上,而 secrets 的生命周期是與服務綁定的,當服務被刪除時,敏感數據也會被刪除。
  • 更新方式不同:configs 的更新是通過重新部署服務來實現的,而 secrets 的更新是通過 Docker CLI 的 docker secret 命令或容器內部的文件系統來實現的。

以下是一個使用 configs? 和 secrets 的 Docker Compose 文件的示例:

version: '3.7'

services:
web:
image: nginx:latest
ports:
- 80:80
configs:
- source: nginx_conf
target: /etc/nginx/nginx.conf
secrets:
- source: db_password
target: /run/secrets/db_password

configs:
nginx_conf:
file: ./nginx.conf

secrets:
db_password:
file: ./db_password.txt

在上面的示例中,我們定義了一個 web 服務,該服務使用了 nginx:latest 鏡像,并將容器內的 80 端口映射到 Docker 主機的 80 端口。此外,我們還定義了兩個配置:configs 和 secrets。

  • configs? 定義了一個名為 nginx_conf 的配置,該配置從本地的 nginx.conf 文件中讀取配置,并將其掛載到容器內的 /etc/nginx/nginx.conf 路徑。這樣,我們就可以使用自定義的 nginx.conf 配置文件來配置 nginx 服務。
  • secrets? 定義了一個名為 db_password 的敏感數據,該數據從本地的 db_password.txt文件中讀取,并將其掛載到容器內的 /run/secrets/db_password 路徑。這樣,我們就可以在容器內部安全地訪問數據庫密碼,而不必擔心密碼泄露的風險。

在上述示例中,我們使用了文件掛載來訪問 configs? 和 secrets。這是最常見的訪問方式,但并不是唯一的方式。secrets 還可以通過 Docker CLI 的 docker secret 命令或容器內部的文件系統來訪問。

九、掛載

在 Docker Compose 中,可以通過掛載主機目錄或文件來訪問容器內部的文件或目錄,以便在容器內外共享數據或配置文件。Docker Compose 支持兩種方式進行掛載:

1)命名卷掛載

命名卷是由 Docker 創建和管理的卷,它們可以用于存儲持久化數據,并可以在多個容器之間共享。在 Docker Compose 中,可以通過 volumes 字段來定義命名卷的掛載路徑和主機目錄的映射關系。關于docker的卷管理可以參考我這篇文章:Docker數據卷—Volumes。示例例如:

version: "3.7"

services:
app:
image: myapp:latest
volumes:
- myapp_data:/app/data

volumes:
myapp_data:

在上述示例中,我們定義了一個 myapp 服務,該服務使用了 myapp:latest 鏡像,并將命名卷 myapp_data 掛載到容器內的 /app/data 目錄。

2)主機目錄掛載

主機目錄掛載允許將 Docker 主機上的目錄或文件夾掛載到容器內部,以便在容器內外共享數據。在 Docker Compose 中,可以通過 volumes 字段來定義主機目錄的掛載路徑和主機目錄的映射關系。例如:

version: "3.7"

services:
app:
image: myapp:latest
volumes:
- /host/data:/app/data

在上述示例中,我們定義了一個 myapp 服務,該服務使用了 myapp:latest 鏡像,并將宿主機上的 /host/data?目錄掛載到容器內的 /app/data 目錄。

【注意】在 Docker Compose 中,如果使用主機目錄掛載,則要求主機目錄必須存在且具有正確的權限。否則,容器將無法訪問該目錄。此外,在使用主機目錄掛載時,請注意掛載的目錄是否包含敏感數據,以避免數據泄露的風險。

十、網絡

Docker Compose 中的網絡可以用于在多個容器之間建立通信。通過定義網絡,可以讓容器之間相互通信,同時將它們與主機網絡隔離開來,提高容器應用的安全性。其實也可參考我之前的文章:Docker四種網絡模式(Bridge,Host,Container,None)

Docker Compose 提供了三種網絡類型:bridge、host 和 none,每種類型都適用于不同的場景。

1)bridge 網絡類型

bridge 網絡類型是默認的網絡類型,它創建一個橋接網絡,允許容器之間進行通信。每個容器都有自己的 IP 地址,并且可以通過容器名稱來相互訪問。如果沒有指定網絡類型,Docker Compose 將使用 ?bridge 網絡類型。

在 bridge 網絡類型中,Docker Compose 會為每個服務創建一個容器,并為每個容器分配一個 IP 地址。在同一個網絡中的容器可以相互訪問。

【請注意】如果您使用了Docker Compose的網絡功能(默認情況下會創建一個網絡),則可以在同一網絡中的任何容器中使用容器名稱來訪問服務。如果您沒有使用Docker Compose網絡功能,則需要手動創建網絡,并將所有容器添加到同一網絡中。

【示例】假設我們有兩個服務:web 和 db。在默認情況下,Docker Compose 使用 bridge 網絡類型,我們可以不用特別指定網絡類型。以下是一個示例的 docker-compose.yml 文件:

version: '3'
services:
web:
build: .
ports:
- "80:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example

在上述示例中,web 服務將使用本地 Dockerfile 構建,并將容器端口 80 映射到主機端口 80。db 服務將使用 MySQL 5.7 鏡像,并設置 MySQL 的 root 用戶密碼為 example。

通過 docker-compose up 命令啟動這個示例,Docker Compose 將為每個服務創建一個容器,并自動創建一個默認的 bridge 網絡來使它們互相通信。

2)host 網絡類型

host 網絡類型讓容器共享主機的網絡棧,這意味著容器將與主機具有相同的 IP 地址和網絡接口。這樣可以提高容器的網絡性能和可訪問性,但是容器之間不能互相訪問,因為它們共享同一個網絡棧。

在 host 網絡類型中,Docker Compose 會將每個服務直接放在主機網絡中,容器將與主機共享 IP 地址和網絡接口,因此可以通過主機 IP 地址來訪問容器中運行的服務。

【示例】假設我們有一個服務,它需要使用主機網絡接口。以下是一個示例的 docker-compose.yml 文件:

version: '3'
services:
web:
build: .
network_mode: host

在上述示例中,我們使用 build 關鍵字來指定構建上下文,并使用 network_mode? 關鍵字將服務 web 的網絡模式設置為 host。這樣,web 服務將與主機共享 IP 地址和網絡接口,可以通過主機 IP 地址來訪問服務。

3)none 網絡類型

none 網絡類型表示不為容器分配任何網絡資源,容器將沒有網絡接口。這通常用于某些特殊的容器場景,例如一些只需要與主機交互而不需要網絡連接的容器。

在 none 網絡類型中,Docker Compose 會將每個服務放在一個單獨的網絡命名空間中,容器將沒有任何網絡資源,無法進行網絡通信。

【示例】假設我們有一個服務,它不需要任何網絡連接。以下是一個示例的 docker-compose.yml 文件:

version: '3'
services:
worker:
build: .
network_mode: none

在上述示例中,我們使用 build 關鍵字來指定構建上下文,并使用 network_mode 關鍵字將服務 worker 的網絡模式設置為 none。這樣,worker 服務將沒有任何網絡資源,無法進行網絡通信。

4)自定義網絡

Docker Compose默認會為每個Compose項目創建一個網絡。這個網絡的名稱會以Compose項目的目錄名作為前綴,例如,如果您的Compose項目目錄名為myproject,則默認創建的網絡名稱為myproject_default。

  • 在這個默認創建的網絡中,所有的服務和容器都可以通過它們的服務名稱或容器名稱進行通信。這些名稱在默認情況下都是唯一的,因此可以避免名稱沖突和混亂。
  • 如果您需要訪問不同的網絡或自定義網絡,則可以使用Docker Compose的networks屬性來創建自定義網絡。例如,以下是一個Docker Compose文件,其中定義了一個名為my_network的自定義網絡:
version: '3'
services:
web:
image: nginx
networks:
- my_network

networks:
my_network:
driver: bridge

在這個示例中,web服務將被連接到my_network網絡中,而不是默認創建的網絡。該網絡的驅動程序為bridge,這是Docker Compose默認使用的網絡驅動程序。

Compose項目目錄名解釋:Compose項目目錄名是指包含Docker Compose文件的目錄的名稱。Docker Compose文件(通常命名為docker-compose.yml)描述了Docker Compose應該如何構建和運行Docker容器應用程序。該文件通常存儲在Compose項目目錄的根目錄中。

例如,如果您正在開發一個名為myapp的應用程序,并使用Docker Compose來管理它的容器化部署,那么您可能會在以下目錄結構中存儲您的Docker Compose文件:

myapp/
├── docker-compose.yml
├── app/
│ ├── Dockerfile
│ └── app.py
└── data/

在這個例子中,myapp是Compose項目目錄名,docker-compose.yml是Compose文件的名稱,并存儲在myapp目錄的根目錄中。myapp目錄還包含了應用程序的代碼和數據目錄。

十一、域名解析 DNS

Docker Compose中的容器可以使用容器名稱或服務名稱來相互訪問,而不需要使用IP地址。這是因為Docker Compose會為每個服務創建一個DNS記錄,這些記錄由默認的DNS解析器處理。

默認情況下,Docker Compose會創建一個名為"projectname_default"的網絡,并將所有服務連接到該網絡中。該網絡使用Docker內置的DNS解析器,為每個服務和容器分配一個DNS名稱。例如,如果您的Compose項目名為"myproject",那么您可以使用以下命令查看所有服務的DNS名稱:

docker-compose run <service> nslookup <service>

例如,如果您的服務名稱為"web",則可以使用以下命令查看web服務的DNS名稱:

docker-compose run web nslookup web

這將輸出web服務的DNS記錄,包括IP地址和DNS名稱。例如:

Server:    127.0.0.11
Address 1: 127.0.0.11

Name: web
Address 1: 172.18.0.2

在這個例子中,web服務的DNS名稱為"web",IP地址為172.18.0.2。您可以使用該名稱("web")來訪問該服務,而無需使用IP地址。

十二、健康檢查

Docker Compose 支持為服務定義健康檢查,用于檢查服務是否正常運行。健康檢查可以是一個命令、一個 HTTP 請求或者一個 TCP 端口。如果健康檢查失敗,Docker Compose 將嘗試重新啟動服務,直到達到最大重試次數或者服務成功運行。

1)健康檢查語法

在 Docker Compose 中,可以通過 healthcheck 關鍵字來定義健康檢查。具體語法如下:

healthcheck:
test: ["CMD-SHELL", "command"]
interval: interval
timeout: timeout
retries: retries

參數解釋:

  • test 是健康檢查的命令或者請求。
  • interval? 是檢查健康狀態的時間間隔,單位為秒,默認為 30s。
  • timeout? 是檢查健康狀態的超時時間,單位為秒,默認為 30s。
  • retries? 是健康檢查失敗時的重試次數,默認為 3。

2)健康檢查寫法

包括以下幾種寫法:

1、字符串形式的命令

healthcheck:
test: curl --fail http://localhost:80 || exit 1
interval: 30s
timeout: 10s
retries: 5

在上述示例中,healthcheck 字段的 test 屬性是一個字符串,表示需要執行的健康檢查命令。在這個示例中,我們使用 curl 命令來測試 localhost:80 是否能夠訪問。如果健康檢查命令返回狀態碼 0,則表示服務正常,否則表示服務異常。在這個示例中,如果健康檢查失敗,Docker Compose 將在每 30 秒嘗試重新運行健康檢查,最多重試 5 次。

2、數組形式的命令

healthcheck:
test:
- CMD
- curl
- --fail
- http://localhost:80
interval: 30s
timeout: 10s
retries: 5

3、自定義命令

healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:80 || exit 1"]
interval: 30s
timeout: 10s
retries: 5

在上述示例中,healthcheck 字段的 test 屬性是一個數組,其中第一個元素是 CMD-SHELL,表示使用 shell 執行命令。第二個元素是一個自定義的命令,與前面的示例相同。

3)CMD-SHELL 與 CMD

CMD-SHELL? 和 CMD? 都是 Dockerfile? 中 RUN? 指令以及 Docker Compose? 中 healthcheck 指令中常用的命令格式,兩者之間的區別如下:

  • CMD-SHELL(這里推薦):表示使用 shell 執行命令。在 Docker Compose 中,健康檢查的 test 屬性中可以使用 CMD-SHELL` 來執行自定義的 shell 命令。
  • CMD:表示執行指定的命令或者命令參數。在 Dockerfile 中,CMD 常用于指定容器啟動時需要執行的命令,而在 Docker Compose 中,CMD 常用于指定服務啟動時需要執行的命令或者命令參數。

兩者的使用方式不同,但都可以用于執行命令或者命令參數。在 Dockerfile 中,CMD-SHELL? 并不是一個有效的指令,而在 Docker Compose 中,CMD 用于定義服務的啟動命令,而 healthcheck? 中的 test 屬性可以使用 CMD-SHELL 來執行自定義的 shell 命令。其實CMD在docker compose healthcheck? 也是可以使用的。只是更建議使用CMD-SHELL。

4)示例講解

以下是一個簡單的Docker Compose文件,其中定義了一個健康檢查:

version: "3"
services:
web:
image: nginx
ports:
- "80:80"
healthcheck:
#test: ["CMD", "curl", "-f", "http://localhost"]
test: ["CMD-SHELL", "curl -f http://localhost"]
interval: 1m
timeout: 10s
retries: 3

在這個例子中,web服務使用nginx鏡像,并將端口80映射到主機上的端口80。此外,它定義了一個健康檢查,該檢查將定期運行curl命令來測試服務是否響應HTTP請求。具體來說,該檢查將每隔1分鐘運行一次,超時時間為10秒,并嘗試重試3次。

您可以使用以下命令啟動該服務:

# 也通過-f指定docker-compose文件
docker-compose up

在服務啟動后,Compose將定期運行健康檢查,并根據檢查結果重啟服務。您可以使用以下命令查看服務的健康狀態:

docker-compose ps

此命令將顯示服務的健康狀態,例如:

Name           Command              State          Ports        
-------------------------------------------------------------------
webapp_web_1 nginx -g daemon off; Up (healthy) 0.0.0.0:80->80/tcp

在這個例子中,服務的健康狀態為"Up (healthy)",這表示服務正在運行并且健康檢查通過。

十三、常用命令

以下是Docker Compose中一些常用的命令:

  • docker-compose up:啟動Compose文件中定義的服務,創建并啟動所有容器。
  • docker-compose down:停止Compose文件中定義的服務,刪除所有容器和網絡。
  • docker-compose ps:顯示Compose文件中定義的所有容器的狀態。
  • docker-compose logs:顯示Compose文件中定義的所有容器的日志。
  • docker-compose build:根據Compose文件中定義的Dockerfile構建所有服務的鏡像。
  • docker-compose pull:拉取Compose文件中定義的所有服務的鏡像。
  • docker-compose restart:重啟Compose文件中定義的所有服務。
  • docker-compose stop:停止Compose文件中定義的所有服務。
  • docker-compose start:啟動Compose文件中定義的所有服務。
  • docker-compose exec:在Compose文件中定義的容器中執行命令。
  • docker-compose run:在Compose文件中定義的容器中運行命令。
  • docker-compose config:檢查Compose文件的語法,并顯示Compose文件中定義的所有服務的配置。

這些是Docker Compose中一些常用的命令,您可以根據需要使用它們來管理和操作Compose項目。

責任編輯:武曉燕 來源: 大數據與云原生技術分享
相關推薦

2017-09-19 15:01:06

PHP漏洞滲透測試

2022-11-19 09:30:31

開源容器

2019-09-17 08:00:24

DockerCompose命令

2015-10-20 15:57:48

ReactiveCociOS

2023-01-12 08:50:46

2024-05-08 08:59:02

2023-07-10 07:22:16

2023-04-06 07:18:14

2021-01-01 09:20:20

操作DjangoORM

2025-04-14 08:00:00

Docker命令運維

2023-05-29 07:39:49

2023-06-26 00:07:14

2023-11-27 00:18:38

2023-05-14 23:30:38

PrestoHadoop函數

2023-08-29 10:27:32

2025-04-10 08:35:00

容器編排Docker容器化

2023-09-08 08:14:14

2017-09-19 15:45:39

2011-10-24 09:49:37

管理非限制進程SELinux

2023-10-23 00:06:29

點贊
收藏

51CTO技術棧公眾號

天堂视频中文在线| 国内偷拍精品视频| 奇米777日韩| 国产日韩欧美在线一区| 国产日本欧美一区二区三区| 久久久久久视频| 亚洲国产中文在线二区三区免| 亚洲成av人影院| 日本一区二区三区四区高清视频| 国产又色又爽又黄又免费| 国产精品成人一区二区网站软件| 精品精品欲导航| 美女黄色片视频| 三级资源在线| 中文字幕精品综合| 国产一区二区免费电影| 中文字幕一区二区三区四区视频| 黄色国产精品| 中文字幕亚洲专区| 波多野结衣先锋影音| 久久亚洲人体| 欧美性猛交视频| 日本xxxxx18| 成人免费在线观看| 91亚洲国产成人精品一区二三| 国产精品久久久久福利| 日韩黄色a级片| 亚洲激情中文| 最近更新的2019中文字幕| 午夜不卡久久精品无码免费| 亚洲人成777| 在线中文字幕一区| 成年人网站国产| 日本在线免费中文字幕| 99久久精品免费| 亚洲最大福利视频网站| 欧美高清69hd| 首页综合国产亚洲丝袜| 午夜精品免费视频| 久久亚洲精品大全| 一本精品一区二区三区| 色偷偷av一区二区三区| 蜜桃传媒一区二区亚洲| 网红女主播少妇精品视频| 日韩欧美亚洲国产精品字幕久久久| 亚洲国产精品毛片av不卡在线| 182在线播放| 一二三四社区欧美黄| 中文字幕免费在线不卡| 国产精品一区二区婷婷| 久久影院午夜片一区| 国产成人女人毛片视频在线| 99热这里只有精品5| 激情欧美一区二区三区在线观看| 国产成人福利网站| 亚洲第一网站在线观看| 美女精品在线| 日产精品久久久一区二区福利| www.国产成人| 99热免费精品在线观看| 91精品成人久久| 日韩精品人妻中文字幕| aa级大片欧美三级| 欧美在线视频网站| 国产黄网在线观看| 日本视频免费一区| 国产乱人伦真实精品视频| 中文在线免费看视频| 免费成人在线视频观看| 国产欧美精品xxxx另类| 国产精品久久久久久久久久久久久久久久| 蜜臀av一区二区在线免费观看| 国产精品久久久久久久午夜| 九九热在线免费观看| 校园激情久久| 国产精品日韩在线| 精品人妻一区二区三区免费看| 亚洲自拍另类| 国产精品久久久久久久久久久久| 中文字幕人妻互换av久久| 麻豆精品一区二区三区| 亚洲一区二区三区成人在线视频精品| 国产精品爽爽久久| 成人免费毛片app| 免费国产一区二区| 在线免费av电影| 亚洲人成网站精品片在线观看| 久久久国内精品| 免费一二一二在线视频| 在线视频国内自拍亚洲视频| 四季av一区二区三区| 一区二区三区自拍视频| 亚洲老头老太hd| 三级影片在线观看| 亚洲麻豆视频| 国产精品视频久| 亚洲国产精品成人久久蜜臀| 91麻豆国产福利精品| 伊人av成人| 嗯啊主人调教在线播放视频 | 老湿机69福利| 亚洲少妇在线| 成人精品久久久| 日本韩国在线观看| 国产精品免费丝袜| 你真棒插曲来救救我在线观看| 亚洲第一会所| 精品国产乱码91久久久久久网站| 亚洲第一成人网站 | 亚洲色成人www永久在线观看| 不卡一二三区| 欧美va亚洲va国产综合| 五月婷婷欧美激情| 亚洲欧洲一区| 成人免费在线视频网站| 黄色小视频在线观看| 亚洲最大成人综合| 亚洲精品久久久中文字幕| 精品人人人人| 欧美精品生活片| 中文字幕乱码人妻二区三区| 99久久久久久| 97干在线视频| 中文久久电影小说| 麻豆乱码国产一区二区三区 | 欧美高清你懂得| 日本少妇色视频| 精品99视频| 亚洲xxxxx| 欧美激情二区| 欧美日韩一区不卡| 精品无码人妻一区二区免费蜜桃| 亚洲国产导航| 不卡一区二区三区视频| 麻豆传媒在线完整视频| 日本道在线观看一区二区| 日韩少妇一区二区| 欧美日韩亚洲国产精品| 亚洲自拍偷拍第一页| 免费在线看a| 欧美日韩情趣电影| 天堂在线中文视频| 日韩高清中文字幕一区| 欧美精品123| 国模套图日韩精品一区二区| 亚洲国产高清福利视频| 国产精品自拍视频一区| 国产sm精品调教视频网站| 久久天天东北熟女毛茸茸| 2020国产精品小视频| 色偷偷噜噜噜亚洲男人| 在线免费看av片| 国产精品国产三级国产aⅴ入口| 色七七在线观看| 成人精品天堂一区二区三区| 国产精品久久久久久久久久久新郎| 男人天堂亚洲二区| 欧洲国内综合视频| 91麻豆制片厂| 激情深爱一区二区| 国产成人在线小视频| 美女呻吟一区| 国产经典一区二区| 日韩伦理在线观看| 欧美一区二区三区白人| 青青草原免费观看| 成人av电影在线网| 日本免费黄视频| 精品国产乱码久久久| 国产精品一区二区三区毛片淫片| 在线免费观看黄| 日韩欧美亚洲一区二区| 日韩精品1区2区| 国产农村妇女毛片精品久久麻豆 | 最新中文字幕在线观看视频| 国产欧美日本一区二区三区| 看看黄色一级片| 亚洲午夜av| 欧美日韩中文国产一区发布 | 亚洲在线黄色| 色综合电影网| 天堂av一区| 欧美一区三区三区高中清蜜桃| 久青青在线观看视频国产| 欧美伦理视频网站| 国产精彩视频在线观看| 国产视频911| 成人三级做爰av| 免费精品视频| 大桥未久一区二区三区| 女人抽搐喷水高潮国产精品| 国产精品69久久| 欧美巨大xxxx做受沙滩| 日韩激情片免费| 最近中文字幕免费观看| 亚洲午夜久久久| jizz18女人高潮| 福利电影一区二区三区| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 婷婷成人基地| 奇米视频888战线精品播放| 国产乱码精品一区二区三区亚洲人| 97在线精品国自产拍中文| 视频免费一区| 国产丝袜一区视频在线观看| 国产精品久久久久久免费免熟| 五月婷婷综合激情| 久久免费看少妇高潮v片特黄| 91在线国产福利| 在线观看一区二区三区视频| 日韩av中文字幕一区二区三区| 91.com在线| 国产精品久久占久久| 青娱乐一区二区| 欧美人体视频| 国产精品白丝jk白祙| 四虎精品在线观看| 国产成人一区三区| 超碰资源在线| 欧美高清一级大片| 免费超碰在线| 中文字幕欧美亚洲| 嫩草研究院在线| 亚洲国产精品va在看黑人| 国产精品久久综合青草亚洲AV| 色噜噜狠狠成人中文综合| 日韩精品在线不卡| 亚洲精品国产视频| 天天操夜夜操av| 中文字幕国产精品一区二区| 日本aaa视频| 99精品视频一区二区三区| 欧美日韩一区二区区别是什么| 久久精品久久精品| 日韩一级理论片| 久久九九精品| 无码无遮挡又大又爽又黄的视频| 一区二区亚洲| 成人网站免费观看入口| 欧美视频二区| 成人一级生活片| 午夜久久福利| 国产一级大片免费看| 欧美韩国一区| 大荫蒂性生交片| 欧美 日韩 国产 一区| 亚洲成年人专区| 亚洲国产一区二区三区在线播放| 亚洲一区二区免费视频软件合集 | 国产精品一区二区三区四| 午夜私人影院久久久久| 国产一级中文字幕| 亚洲成人自拍网| 日韩三级一区二区三区| 精品久久久久久久久久| 激情五月色婷婷| 福利视频第一区| 中文字幕精品无| 欧美日韩中字一区| 国产精品久久久久久免费免熟| 欧美一区二区免费| 成人乱码一区二区三区 | 影音先锋中文字幕一区| 性欧美大战久久久久久久| 国产日韩欧美一区在线| 久久婷婷国产精品| 青青草精品视频| 999久久久精品视频| 国产不卡一区视频| 国产又爽又黄无码无遮挡在线观看| 久久亚洲免费视频| 成年人免费视频播放| 亚洲欧美激情小说另类| 国产精品2020| 色综合久久久久综合体| 一二三四区视频| 欧美xxxx老人做受| 精品亚洲综合| 色狠狠久久aa北条麻妃| 日本大片在线播放| 国产999精品久久久| 91精品网站在线观看| 俄罗斯精品一区二区三区| 夜夜躁狠狠躁日日躁2021日韩| 亚洲第一综合| 欧美三级视频| 91制片厂毛片| 成人免费毛片高清视频| 少妇精品无码一区二区免费视频| 亚洲欧美成人一区二区三区| 日韩三级视频在线播放| 欧美区在线观看| 婷婷丁香花五月天| 久久精品久久久久久国产 免费| 国产蜜臀在线| 国产狼人综合免费视频| 麻豆一区二区| 亚洲综合激情五月| 久久久久久婷| 2018国产精品| 国产精品久久免费看| 日本学生初尝黑人巨免费视频| 欧美日韩视频专区在线播放| 国产成人三级在线观看视频| 伊人伊成久久人综合网小说| 蜜臀av在线| 成人久久久久久| 久久93精品国产91久久综合| 青青在线视频免费观看| 蜜臀久久99精品久久久久久9| 亚洲精品中文字幕在线播放| 亚洲日本中文字幕区| 香蕉污视频在线观看| 精品国产91九色蝌蚪| 美女国产在线| 国产精品第2页| 欧美大片网址| 福利在线一区二区| 国产精品自拍一区| 亚洲激情图片网| 日韩欧美中文第一页| 欧美亚洲精品在线观看| 欧美大尺度在线观看| 少妇高潮一区二区三区99| 日韩精品伦理第一区| 日韩视频久久| 看全色黄大色黄女片18| 亚洲精品视频在线| 91影院在线播放| 日韩在线视频播放| 黄色成人小视频| 日本一区二区三区免费观看 | 日韩精品视频一二三| 久久久精品国产免大香伊| 日韩少妇裸体做爰视频| 亚洲国产欧美精品| 欧美1—12sexvideos| 999视频在线免费观看| 亚洲精品成人| 手机精品视频在线| 亚洲欧洲无码一区二区三区| 中文在线免费观看| 日韩一区二区久久久| 一呦二呦三呦精品国产| 欧美性bbwbbwbbwhd| 天堂va蜜桃一区二区三区漫画版| 超碰97在线资源站| 黑人精品xxx一区一二区| 天堂a中文在线| 日本精品免费观看| 国产精品欧美在线观看| 久久午夜夜伦鲁鲁一区二区| 国产午夜精品一区二区三区四区| 人人草在线观看| 一二美女精品欧洲| 激情亚洲小说| 国产一区一区三区| 国产乱人伦精品一区二区在线观看 | 亚洲男人第一av| 亚洲欧美综合区自拍另类| 日韩毛片一区| 中文字幕乱码免费| 成人福利视频网站| 在线天堂中文字幕| 中文日韩电影网站| 久久久91麻豆精品国产一区| 人人妻人人澡人人爽欧美一区双| 不卡在线视频中文字幕| 久草国产精品视频| 一区二区三区 在线观看视| 日韩专区视频| 日韩精品一区二区三区四| 成人激情av网| 亚洲av无码不卡| 久久精品这里热有精品| 亚洲一区二区免费在线观看| 鲁一鲁一鲁一鲁一色| 国产日韩欧美一区二区三区乱码| 中文字幕在线观看高清| 欧美裸体男粗大视频在线观看| 福利在线一区| 亚洲激情在线观看视频| 亚洲一区二区美女| 日本护士...精品国| 国产欧美精品在线播放| 亚洲欧洲一级| 午夜精品久久久久99蜜桃最新版| 精品国产3级a| 日韩在线电影| 国产性xxxx18免费观看视频| 日韩理论片在线| 亚洲欧美日韩成人在线| 国产一区视频在线播放| 99日韩精品| 欧美一级特黄高清视频| 日韩精品中文字幕视频在线| **欧美日韩在线| 亚洲爆乳无码专区| 亚洲综合一区在线| 91精品国产91久久久久游泳池|