Docker Swarm 中编排容器的工具,类似 Docker Compose
docker stack ls
docker stack services stack名称
docker stack ps stack名称
docker stack deploy -c yaml文件名称 stack名称
docker stack rm stack名称
# 版本信息
version: 此 Docker Stack 文件的版本(需要大于3.0)
# 服务信息
services:
## 第一个服务
服务1名称:
### 指定服务使用的镜像
image: 此服务使用的镜像,格式为“name:tag”
### 指定镜像拉取策略
pull_policy: 镜像拉取策略,可选 always、never、missing、build
### 指定服务的容器名称(已不支持)
container_name: 容器名称
### 指定容器重启策略
restart: 容器重启策略,可选 "no"、always、on-failure、unless-stopped
### 指定容器是否以特权模式运行
privileged: true
### 指定容器是否以只读模式运行
read_only: true
### 指定运行容器的用户
user: "用户名:用户组"
### 指定容器的工作目录
working_dir: 工作目录
### 指定服务的网络方式
network_mode: "网络方式(可选 host(使用主机网络接口)、none(禁用网络)、service:{name}(仅允许访问指定的服务))"
### 指定服务使用的网络
networks:
- 网络1
- 网络n
### 指定容器需要暴露的端口
ports:
#### 方式一(长形式)
- target: 容器端口
published: "公开端口,可配置单个或范围"
host_ip: 监听的IP
protocol: 端口协议,可选 tcp、udp
mode: 端口模式,可选 host、ingress
### 方式二(短形式)
- "公开端口:容器端口/端口协议(可选)"
### 指定容器的 DNS
dns:
- DNS服务器1
- DNS服务器n
### 指定容器运行时执行的命令
command: 此服务的容器需要执行的命令
### 指定容器使用的 Volume 信息
volumes:
#### 方式一
- type: Volume的类型,可选 volume、bind、tmpfs、npipe
source: Volume使用的资源,Volume的名称或主机的目录
target: 容器内目录
read_only: true(配置容器内部为只读,不配置默认为可读写)
volume:
nocopy: true(创建卷时是否禁止从容器复制数据)
#### 方式二
- Volume的名称或主机的目录:容器内目录:ro(可选,配置后表示容器内只读)
### 指定容器使用的 Config 信息
configs:
#### 方式一
- source: Config的名称
target: 容器内部文件名称(包含路径和文件名),不指定时默认为 “/Config的名称”
gid: "文件所属用户组ID"
uid: "文件所属用户ID"
mode: 文件权限,默认为 0444
#### 方式二(此时将 Config 挂载至容器内部的 /Config的名称 )
- Config的名称
### 指定容器使用的 Secret 信息
secrets:
#### 方式一
- source: Secret的名称
target: 容器内部文件名称(包含路径和文件名),不指定时默认为 “/run/secrets/Secret的名称”
gid: "文件所属用户组ID"
uid: "文件所属用户ID"
mode: 文件权限,默认为 0444
#### 方式二(此时将 Secret 挂载至容器内部的 /run/secrets/Secret的名称 )
- Secret的名称
### 指定容器的环境变量文件
env_file:
- 环境变量文件1
- 环境变量文件n
### 指定容器的环境变量
environment:
- 环境变量1的名称=环境变量1的值
- 环境变量n的名称=环境变量n的值
### 指定服务的依赖,即此服务需要等哪些服务启动完成后才能启动
depends_on:
#### 方式一
- 依赖的服务名称:
##### 在依赖的服务更新之后是否需要重启此服务
restart: true
##### 是否满足依赖的判断条件
condition: 是否满足依赖的判断条件,可选 service_started(依赖的服务启动即可)、service_healthy(依赖的服务状态为健康时)、service_completed_successfully(依赖的服务状态为成功时)
#### 方式二
- 依赖的服务名称
### 指定 deploy 相关信息
deploy:
#### 模式
mode: 此服务的模式,对应 swarm 的 mode,可选 replicated(复制) 、global(全局),默认为 replicated
#### 副本数
replicas: 此服务的副本数
#### 重启策略
restart_policy:
condition: 服务的重启条件,可选 none、on-failure、any,默认为 any
delay: 重启间隔时间,不同任务之间的重启间隔,s 为秒、m 为分钟,默认为 0
max_attempts: 最多重启次数,无默认
window: 失败判断时间,等待多长时间后判断重启是否成功,默认为 0
### 更新策略
update_config:
parallelism: 同时更新任务数,默认为 1
delay: 更新间隔时间,不同任务之间的更新间隔,s 为秒、m 为分钟,默认为 0
failure_action: 更新失败时的操作,可选 continue、rollback、pause,默认为 pause
monitor: 失败判断时间,等待多长时间后判断更新是否成功,默认为 0
max_failure_ratio: 更新期间允许的故障率,可选 0 ~ 1 及其直接的任何数,默认为 0
order: 更新的操作顺序,可选 stop-first(先停后启)、start-first(先启后停),默认为 stop-first
#### 回滚策略
rollback_config:
parallelism: 同时回滚任务数,为 0 时所有任务同时回滚,默认为 1
delay: 回滚间隔时间,不同任务之间的回滚间隔,默认为 0
failure_action: 回滚失败时的操作,可选 continue、pause,默认为 pause
monitor: 失败判断时间,等待多长时间后判断回滚是否成功,默认为 0
max_failure_ratio: 回滚期间允许的故障率,可选 0 ~ 1 及其直接的任何数,默认为 0
order: 回滚的操作顺序,可选 stop-first(先停后启)、start-first(先启后停),默认为 stop-first
#### 放置规则
placement:
##### 约束条件(强制的,即必须将服务部署在满足条件的节点)
constraints:
- 约束条件1的类型: 约束条件1的值
- 约束条件n的类型: 约束条件n的值
##### 偏好(非强制的,即将服务优先部署在满足条件的节点)
preferences:
- 偏好1的类型: 偏好1的值
- 偏好n的类型: 偏好n的值
#### 容器资源限制
resources:
##### 最多可分配的资源
limits:
cpus: 'CPU核心数(可以为小数)'
memory: 内存大小(M、G)
pids: pid限制(必须为整数)
##### 最少需分配资源
reservations:
cpus: 'CPU核心数(可以为小数)'
memory: 内存大小(M、G)
#### 标签
labels:
- "自定义标签1的key=自定义标签1的value"
- "自定义标签n的key=自定义标签n的value"
### 需要导入的其他服务
extends:
service: 服务名称
file: 此服务的yaml文件路径,可选,不配置时默认当前yaml文件中的服务
# 网络信息
networks:
## 第一个网络
网络1:
### 是否使用外部网络(即是否使用已经存在的网络),为 true 时仅可配置 name
external: true
### 网络名称
name: 网络名称
### 驱动器
driver: 网络的驱动器,可选 bridge、none、overlay、host,默认为 bridge
### 驱动器选项,不同的驱动器选项不同,具体见官方文档
driver_opts:
驱动器选项1: 驱动器选项1的值
驱动器选项n: 驱动器选项n的值
### 指定独立容器是否可连接到此网络
attachable: true
### 网络配置
config:
#### 配置项1
- subnet: 子网网段
ip_range: 容器IP范围
gateway: 网关IP
##### 网络驱动程序使用的辅助IPv4或IPv6地址,作为主机名到IP的映射
aux_addresses:
主机名1: ip1
主机名n: ipn
# 卷信息
volumes:
## 第一个卷
卷1:
### 是否使用外部卷(即是否使用已经存在的卷),为 true 时仅可配置 name
external: true
### 卷名称
name: 卷名称
### 驱动器
driver: 卷的驱动器,可选 local、nfs,默认为 local
### 驱动器选项,不同的驱动器选项不同,具体见官方文档
driver_opts:
驱动器选项1: 驱动器选项1的值
驱动器选项n: 驱动器选项n的值
# 配置信息
configs:
## 第一个配置
配置1:
### 是否使用外部配置(即是否使用已经存在的配置),为 true 时仅可配置 name
external: true
### 配置名称
name: 配置名称
### 配置文件
file: 配置文件
# 秘密信息
secrets:
## 第一个秘密
秘密1:
### 是否使用外部秘密(即是否使用已经存在的秘密),为 true 时仅可配置 name
external: true
### 秘密名称
name: 秘密名称
### 秘密文件(将文件作为秘密)
file: 秘密文件
### 秘密环境变量(将环境变量的值作为秘密)
environment: "环境变量名称"