Docker Compose
介绍
通过yml文件配置,高效管理多个docker,启停
https://www.php.cn/manual/view/36129.html
安装
# 慢
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内镜像
$ sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权文件
$ sudo chmod +x /usr/local/bin/docker-compose
测试
$ docker-compose --version
docker-compose version 1.27.4, build 1110ad01
卸载
sudo rm /usr/local/bin/docker-compose
测试使用(官方给的)
1创建文件夹
$ mkdir composetest
$ cd composetest
2写测试程序Python。app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
3创建py文件依赖文件requirements.txt
flask
redis
4创建Dockerfile文件
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
5创建docker-compose.yml
# version: "3.9" 需要版本对应
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
6使用Compose构建并运行应用程序
docker-compose up
# 后台运行
# docker-compose up -d
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87feppxX-1608950922543)(C:\Users\admin\AppData\Local\Temp\1608866566146.png)]
- docker images 自动下载依赖镜像
- 默认服务名: 文件名 _ 服务名 _ num(集群副本数量)
- 创建docker compose自己默认网络,并将所有启动的容器添加到网络中
- 在同一网络下可以直接使用域名访问
停止
# 前端运行使用 ctrl + c 停止
# 后台运行使用
docker-compose stop
yml文件规则
version: "3" # docker-compose核心版本
services: # 服务
fw: # 服务名称
image: redis # 服务配置
ports: # 服务配置2
- "5000:5000"
depends_on: # 依赖(启动顺序)
- fw2
- redis
..... # 容器启动的所有配置
fw2:
image: # 服务配置
官方文档 https://docs.docker.com/compose/compose-file/compose-file-v2/
测试开源程序(官方给的)
创建工作文件夹 my_wordpress/
创建docker-compose.yml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
后台运行
docker-compose up -d
Docker Swarm
- 集群
- 必须有两个或两个以上主节点才能运行
[root@centos3 ~]# docker swarm --help
Usage: docker swarm COMMAND
Manage Swarm
Commands:
ca 管理根CA
init 初始化集群
join 加入集群
join-token 创建加入令牌
leave 离开集群
unlock 解锁群
unlock-key 管理解锁密钥
update 更新集群
Run 'docker swarm COMMAND --help' for more information on a command.
1初始化一个集群
docker swarm init [OPTIONS]
名字,简写 | 默认 | 描述 |
---|---|---|
–advertise-addr | 通告地址(格式:<ip | interface>:端口) | |
–autolock | 假 | 启用管理器自动锁定(需要解锁密钥才能启动停止的管理器) |
–availability | active | 节点的可用性(“活动”|“暂停”|“漏”) |
–cert-expiry | 2160h0m0s | 节点证书的有效期(ns | us | ms | s | m | h) |
–data-path-addr | 用于数据路径流量的地址或接口(格式:<ip | interface>) | |
–dispatcher-heartbeat | 5S | 调度员心跳周期(ns | us | ms | s | m | h) |
–external-ca | 一个或多个证书签名端点的规格 | |
–force-new-cluster | 假 | 强制从当前状态创建一个新的群集 |
–listen-addr | 0.0.0.0:2377 | 监听地址(格式:<ip | interface>:端口) |
–max-snapshots | 0 | 要保留的附加木筏快照的数量 |
–snapshot-interval | 10000 | Raft快照之间的日志条目数 |
–task-history-limit | 5 | 任务历史保留限制 |
# 初始化集群
docker swarm init --advertise-addr 192.168.0.191
2加入一个节点
docker swarm join [OPTIONS] HOST:PORT
名字,简写 | 默认 | 描述 |
---|---|---|
–advertise-addr | 通告地址(格式:<ip | interface>:端口) | |
–availability | active | 节点的可用性(“活动”|“暂停”|“漏”) |
–data-path-addr | 用于数据路径流量的地址或接口(格式:<ip | interface>) | |
–listen-addr | 0.0.0.0:2377 | 监听地址(格式:<ip | interface>:端口) |
–token | 进入群的令牌 |
# 例如加入一个节点
# 令牌SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 192.168.0.191:2377
3获取令牌
docker swarm join-token [OPTIONS] (worker|manager)
# 工作令牌
docker swarm join-token worker
# 管理令牌
docker swarm join-token manager
查看节点
# 查看节点
docker node
Docker Service
docker service COMMAND
命令 | 描述 |
---|---|
docker service create | 创建一项新服务 |
docker service inspect | 显示一项或多项服务的详细信息 |
docker service logs | 获取服务或任务的日志 |
docker service ls | 列出服务 |
docker service ps | 列出一项或多项服务的任务 |
docker service rm | 删除一项或多项服务 |
docker service scale | 扩展一个或多个复制服务 |
docker service update | 更新服务 |
1创建服务
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
名字,简写 | 默认 | 描述 |
---|---|---|
–config | 指定配置以暴露给服务 | |
–constraint | 展示位置限制 | |
–container-label | 容器标签 | |
–credential-spec | 托管服务帐户的凭证规范(仅限Windows) | |
–detach,-d | 真正 | 立即退出,而不是等待服务收敛 |
–dns | 设置自定义DNS服务器 | |
–dns-option | 设置DNS选项 | |
–dns-search | 设置自定义DNS搜索域 | |
–endpoint-mode | 要人 | 端点模式(vip或dnsrr) |
–entrypoint | 覆盖图像的默认入口点 | |
–env,-e | 设置环境变量 | |
–env-file | 读入环境变量文件 | |
–group | 为容器设置一个或多个补充用户组 | |
–health-cmd | 运行以检查运行状况的命令 | |
–health-interval | 运行检查之间的时间(ms | s | m | h) | |
–health-retries | 0 | 需要报告不健康的连续失败 |
–health-start-period | 在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段 | |
–health-timeout | 允许一次检查运行的最长时间(ms | s | m | h) | |
–host | 设置一个或多个自定义主机到IP映射(主机:IP) | |
–hostname | 容器主机名 | |
–label, -l | 服务标签 | |
–limit-CPU | 限制CPU | |
–limit-memory | 0 | 限制记忆 |
–log-driver | 记录驱动程序的服务 | |
–log-OPT | 记录驱动程序选项 | |
–mode | 复制 | 服务模式(复制或全局) |
–mount | 将文件系统挂载附加到服务 | |
–name | 服务名称 | |
–network | 网络附件 | |
–no-healthcheck | 假 | 禁用任何容器指定的HEALTHCHECK |
–no-resolve-image | 假 | 不要查询注册表来解析图像摘要和支持的平台 |
–placement-PREF | 添加展示位置首选项 | |
–publish,-p | 将端口发布为节点端口 | |
–quiet,-q | 假 | 抑制进度输出 |
–read-only | 假 | 将容器的根文件系统挂载为只读 |
–replicas | 任务数量 | |
–reserve-CPU | 预留CPU | |
–reserve-memory | 0 | 保留内存 |
–restart-condition | 满足条件时重新启动(“none”|“on-failure”|“any”)(默认为“any”) | |
–restart-delay | 重启尝试之间的延迟(ns | us | ms | s | m | h)(默认5秒) | |
–restart-max-attempts | 放弃前的最大重启次数 | |
–restart-window | 用于评估重新启动策略的窗口(ns | us | ms | s | m | h) | |
–rollback-delay | 0 | 任务回滚之间的延迟(ns | us | ms | s | m | h)(默认值为0) |
–rollback-failure-action | 回滚失败的操作(“暂停”|“继续”)(默认“暂停”) | |
–rollback-max-failure-ratio | 0 | 在回滚期间容忍的失败率(默认0) |
–rollback-monitor | 0 | (ns | us | ms | s | m | h)(默认5秒)每个任务回滚之后的持续时间 |
–rollback-order | 回滚顺序(“start-first”|“stop-first”)(默认“stop-first”) | |
–rollback-parallelism | 1 | 同时回滚的任务的最大数量(0一次全部回滚) |
–secret | 指定泄露给服务的秘密 | |
–stop-grace-period | 强制杀死一个容器之前等待的时间(ns | us | ms | s | m | h)(默认10秒) | |
–stop-signal | 停止容器的信号 | |
–tty, -t | 假 | 分配一个伪TTY |
–update-delay | 0 | 更新之间的延迟(ns | us | ms | s | m | h)(默认为0) |
–update-failure-action | 更新失败的操作(“暂停”|“继续”|“回滚”)(默认“暂停”) | |
–update-max-failure-ratio | 0 | 更新期间容许的失败率(默认0) |
–update-monitor | 0 | (ns | us | ms | s | m | h)(默认5秒)每个任务更新后的持续时间 |
–update-order | 更新顺序(“start-first”|“stop-first”)(默认为“stop-first”) | |
–update-parallelism | 1 | 同时更新的最大任务数(0个一次全部更新) |
–user,-u | 用户名或UID(格式:<名称| uid>:<组| gid>) | |
–with-registry-auth | 假 | 向注册代理发送注册表认证详细信息 |
–workdir,-w | 容器内的工作目录 |
# 例如,启动一个nginx服务,暴露8080端口
docker service create -p 8080:80 --name nginx01 nginx
# docker run 容器启动,单机版本
# docker service 服务启动,支持扩缩容器
# 查看服务
docker service ps nginx01
# 查看副本
docker service ls
# 查看详情
docker service inspect nginx01
2更新服务
docker service update [OPTIONS] SERVICE
名字,简写 | 默认 | 描述 |
---|---|---|
–args | 服务命令参数 | |
–config-add | 添加或更新服务上的配置文件 | |
–config-RM | 删除配置文件 | |
–constraint-add | 添加或更新展示位置约束 | |
–constraint-RM | 删除约束 | |
–container-label-add | 添加或更新容器标签 | |
–container-label-rm | 用钥匙取出容器标签 | |
–credential-spec | 托管服务帐户的凭证规范(仅限Windows) | |
–detach,-d | 真 | 立即退出,而不是等待服务收敛 |
–dns-add | 添加或更新自定义DNS服务器 | |
–dns-option-add | 添加或更新DNS选项 | |
–dns-option-rm | 删除一个DNS选项 | |
–dns-rm | 删除自定义的DNS服务器 | |
–dns-search-add | 添加或更新自定义DNS搜索域 | |
–dns-search-rm | 删除一个DNS搜索域 | |
–endpoint-mode | 端点模式(vip或dnsrr) | |
–entrypoint | 覆盖图像的默认入口点 | |
–env-add | 添加或更新环境变量 | |
–env-RM | 删除一个环境变量 | |
–force | 假 | 即使没有更改需要,也强制更新 |
–group-add | 向容器添加一个附加的补充用户组 | |
–group-RM | 从容器中删除先前添加的补充用户组 | |
–health-cmd | 运行以检查运行状况的命令 | |
–health-interval | 运行检查之间的时间(ms | s | m | h) | |
–health-retries | 0 | 需要报告不健康的连续失败 |
–health-retries | 在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段 | |
–health-timeout | 允许一次检查运行的最长时间(ms | s | m | h) | |
–host加 | 添加或更新自定义主机到IP映射(主机:IP) | |
–host-RM | 删除自定义的主机到IP映射(主机:IP) | |
–hostname | 容器主机名 | |
–image | 服务图片标签 | |
–label-add | 添加或更新服务标签 | |
–label-RM | 用钥匙去除标签 | |
–limit-CPU | 限制CPU | |
–limit-memory | 0 | 限制记忆 |
–log-driver | 记录驱动程序的服务 | |
–log-OPT | 记录驱动程序选项 | |
–mount-add | 添加或更新服务上的装载 | |
–mount-RM | 通过目标路径移除一个安装 | |
–network加 | 添加一个网络 | |
–network-RM | 删除网络 | |
–no-healthcheck | 假 | 禁用任何容器指定的HEALTHCHECK |
–no-resolve-image | 假 | 不要查询注册表来解析图像摘要和支持的平台 |
–placement-PREF-ADD | 添加展示位置首选项 | |
–placement-PREF-RM | 删除展示位置偏好设置 | |
–publish相加 | 添加或更新已发布的端口 | |
–publish-RM | 通过目标端口删除发布的端口 | |
–quiet,-q | 假 | 抑制进度输出 |
–read-only | 假 | 将容器的根文件系统挂载为只读 |
–replicas | 任务数量 | |
–reserve-CPU | 预留CPU | |
–reserve-memory | 0 | 保留内存 |
–restart-condition | 条件满足时重新启动(“none”|“on-failure”|“any”) | |
–restart-delay | 重启尝试之间的延迟(ns | us | ms | s | m | h) | |
–restart-max-attempts | 放弃前的最大重启次数 | |
–restart-window | 用于评估重新启动策略的窗口(ns | us | ms | s | m | h) | |
–rollback | 假 | 回退到先前的规范 |
–rollback-delay | 0 | 任务回滚之间的延迟(ns | us | ms | s | m | h) |
–rollback-failure-action | 回滚失败的操作(“暂停”|“继续”) | |
–rollback-max-failure-ratio | 0 | 在回滚期间容忍的失败率 |
–rollback-monitor | 0 | 每个任务回滚后监视失败的持续时间(ns | us | ms | s | m | h) |
–rollback-order | 回滚顺序(“start-first”|“stop-first”) | |
–rollback-parallelism | 0 | 同时回滚的任务的最大数量(0一次全部回滚) |
–secret-add | 添加或更新服务的秘密 | |
–secret-RM | 去掉一个秘密 | |
–stop-grace-period | 强制杀死一个容器之前的等待时间(ns | us | ms | s | m | h) | |
–stop-signal | 停止容器的信号 | |
–tty, -t | 假 | 分配一个伪TTY |
–update-delay | 0 | 更新之间的延迟(ns | us | ms | s | m | h) |
–update-failure-action | 更新失败的操作(“暂停”|“继续”|“回滚”) | |
–update-max-failure-ratio | 0 | 更新期间容错的失败率 |
–update-monitor | 0 | (ns | us | ms | s | m | h)每个任务更新后的持续时间 |
–update-order | 更新顺序(“start-first”|“stop-first”) | |
–update-parallelism | 0 | 同时更新的最大任务数(0个一次全部更新) |
–user,-u | 用户名或UID(格式:<名称| uid>:<组| gid>) | |
–with-registry-auth | 假 | 向注册代理发送注册表认证详细信息 |
–workdir,-w | 容器内的工作目录 |
# 为 nginx01 创建 10 个副本
docker service update --replicas 10 nginx01
# 或 使用 scale 命令
docker service scale nginx01=10
移除服务
docker service rm nginx01