跳到主要内容

Docker 编排

1. 什么是 Docker-Compose

Docker-Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Docker-Compose,可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令,即可从配置中创建并启动所有服务。

2. 使用流程

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 执行 docker compose up 命令来启动并运行整个应用程序。

3. 安装

使用 yum 安装

# 安装 Docker 引擎后补充安装 Docker-Compose 插件
> sudo yum install -y docker-compose-plugin
# 测试安装结果
> docker compose version

4.docker.compose.yml 文件

基本格式

version: '3.8'
services:
web:
build: .
ports:
- '5000:5000'
volumes:
- .:/code
- logvolume01:/var/log
links:
- db
depends_on:
- db
redis:
image: redis
db:
image: postgres

4.1 顶级元素

  • version

指定 docker-compose.yml 文件的写法格式,如果低于 3.7 版本,需要使用 build 属性来指定构建路径。 https://docs.docker.com/compose/compose-file/compose-versioning/

目前最新版本是 3.8(2024.04)

version: '3.8'
  • name

定义应用程序的名字(不指定该属性,则应用程序名默认为使用 yml 文件所在的目录名)。名字只能包含小写字母、数字、破折号(-)和下划线(_),且必须以小写字母开头。

name: webapp
  • services

定义应用程序所需的服务集合。

services:
web: # 自定义的服务名
build: . # 指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
ports: # 服务所使用的端口映射
- '5000:5000'
volumes: # 服务所使用的数据卷映射
- .:/code
- logvolume01:/var/log
links:
- db
depends_on:
- db
redis:
image: redis # 指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
container_name: my-redis # 指定容器名称
command: redis-server --appendonly yes # 覆盖容器启动后默认执行的命令
networks:
- frontend
- backend
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
mysql:
image: mysql
environment: # 服务所使用的环境变量
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: my_db
  • networks

定义应用程序的网络集合。

networks:
net1: # 网络名字为:应用程序名_net1
driver: bridge # 默认bridge 网络模式
net2: # 如果使用 bridge 模式,可以不用写