本篇文章给大家谈谈docker-compose实践,以及dockercompose实战的知识点,同时本文还将给你拓展25.dockercompose简介和docker-compose.yml参数介绍、
本篇文章给大家谈谈docker-compose 实践,以及docker compose实战的知识点,同时本文还将给你拓展25.docker compose 简介 和 docker-compose.yml 参数介绍、Docker Compose 和 Docker Swarm 和 Docker Service、Docker Compose 实践及梳理、Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- docker-compose 实践(docker compose实战)
- 25.docker compose 简介 和 docker-compose.yml 参数介绍
- Docker Compose 和 Docker Swarm 和 Docker Service
- Docker Compose 实践及梳理
- Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本
docker-compose 实践(docker compose实战)
优势 / 区别: 使用 docker run 启动的进程在机器重启后关闭,而 docker-compose 启动的会自动重启
1. 安装 docker-compose,也可以在其他机器上直接 copy
curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` >/usr/local/bin/docker-compose
2. 增加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3. 检查版本
docker-compose --version
4. 升级
docker-compose migrate-to-labels
5. 删除
sudo rm /usr/local/bin/docker-compose
6. 获取 image
拉取 yml 中描述的 image
docker-compose pull docker-compose.yml
拉取与服务中指定的 image
docker-compose pull ServiceName
7. 启动 / 暂停服务
docker-compose --file ***.yml down
docker-compose --file ***.yml up -d
【容器启动时启动多条命令】
1. docker run -it myimage sh -c ''service MySQL start && Python test.py''
2. docker-compose.yml 中使用 command: /bin/bash -c ''npm run build && npm start''
25.docker compose 简介 和 docker-compose.yml 参数介绍
1. docker compose概念 文档 https://docs.docker.com/compose/compose-file/compose-versioning
一个基于 docker 的工具
可以通过一个 yml 文件定义多容器的 docker 应用
通过一条命令就可以根据 yml 文件的定义 去创建或者管理这多个容器
2 docker compose 版本 2 与 版本 3 的区别
最大的区别
version 2 只能用于单机
version 3 可用于多机
3. docker-compose.yml
Services
一个 service 代表一个 container , 这个 container 可以从 dockerhub 的 image 来创建, 或者从本地的 Dockerfile build出来的image 来创建
service 的启动 类似与 docker run , 我们可以给其指定 network 和 volume . 所以可以给 service 指定 network 和 volume 的引用
eg :
docker run -d --name db -v db-data:/var/liv/postgresql/data --network back-tier postgres:9.4
services:
db: #service 的名称为 db
image: postgres:9.4 #service image 为 postgres:9.4 这是从远程拉取的
volumes:
- "db-data:/var/liv/postgresql/data" #将外部db-data挂载到container 的 /var/liv/postgresql/data 内
networks:
- back-tier #网络为 back-tier
eg2:
docker run -d --link db --link redis --network back-tier worker
services:
worker:
build: ./worker
links:
- db
- redis
networks:
- back-tier #在同一个网络上 不需要links
Volumes:
上面 的
volumes:
- "db-data:/var/liv/postgresql/data" #将外部db-data挂载到container 的 /var/liv/postgresql/data 内
会有单独的一个 volumes (与 services 同级别) 对db-data 进行 阐述
类似于 docker volume create db-data
eg:
volumes:
db-data:
Nerworks:
上面 的
networks:
- back-tier #在同一个网络上 不需要links
会有单独的一个 networks (与 services 同级别) 对back-tier 进行 阐述
类似于 docker nerwork create -d bridge back-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
4编写 docker-compose.yml
# docker compose api 版本
version: ''3''
services:
# 定义了 两个 service 分别是 名字分别是 wordpress 和 mysql
wordpress:
#image 为 word press
image: wordpress
#本地 8888 端口 映射 容器 80 端口
ports:
- 8888:80
#wordpress 连接数据库 的 host 为 mysql , passwword 为 root 类似于 -e
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
#指定连接 的网络 为 my-bridge
networks:
- my-bridge
mysql:
image: mysql:5.7.27
# 数据库 root 的 连接密码 和 所使用的数据库名称
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
# 外部 mysql-data 挂载到 容器内的 /var/lib/mysql
volumes:
- mysql-data:/var/lib/mysql
#指定连接 的网络 为 my-bridge
networks:
- my-bridge
# 定义 volumes
volumes:
mysql-data:
# 定义 networks
networks:
my-bridge:
driver: bridge
Docker Compose 和 Docker Swarm 和 Docker Service
Docker Compose
介绍
通过yml文件配置,高效管理多个docker,启停
中文文档
https://www.jb51.cc/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
Docker Compose 实践及梳理
Docker Compose 可以实现 Docker 容器集群的编排,可以通过 docker-compose.yml
文件,定义我们的服务及其需要的依赖,轻松地运行在测试、生产等环境
文档
Product manuals
Compose file version 3 reference
Docker 从入门到实践 【中文】
安装 Compose
Compose 依赖 Docker Engine,所有要保证环境安装了 Docker,可参考官方教程,主要分为两步:
# 1. 下载 Compose 只执行文件到 usr/local/bin/ 目录 # 下载失败可以参考下一小结提供地址安装 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 2. 对 Compose 可执行文件添加运行权限 sudo chmod +x /usr/local/bin/docker-compose # 输入下面命令查看帮助,测试安装是否成功 docker-compose -h
Compose 开源在 Docker 官方的 GitHub 仓库:docker/compose,所有的 Compose 都会发布在仓库的 Releases 里,步骤1就是使用 curl 命令从 Releases 里下载可执行文件,uname -s
和uname -m
可以读取系统的内核名称和硬件架构,用来匹配需要的 Compose 版本, curl
的 -L 参数会让 HTTP 请求跟随重定向(默认不跟随),-o (小写o) 会将服务器响应保存成文件,直接下载到:usr/local/bin/ 下,文件名为:docker-compose,因为这个路径已经在环境变量中了,所以完成步骤2,添加可执行权限后,就可以在任意位置使用了
直接从 GitHub 下载比较慢可以通过以下地址下载:
# https://vuepress.mirror.docker-practice.com/compose/install/ sudo curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
入门
Compose 的模版指令与 Docker 的 run 命令相关参数很相似,忘记了 docker 命令可以参考之前的一篇博客:Docker 实践及命令梳理
Compose 中有两个重要的概念:
- 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
- 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在
docker-compose.yml
文件中定义
docker-compose.yml
格式如下,注意:YAML 文件必须要键值之间的 :
后面必须有一个空格,缩进表示层级,要注意缩进
有使用到的 volumes 和 networks 必须声明
# 指定版本 version: "3" # 服务的集合 services: # 其中一个服务,服务名为:webapp webapp: # 指定该服务使用的镜像 image: examples/web # 端口映射 ports: - "80:80" # 数据卷 volumes: - "/data"
简单上手
在一个 Compose 中启动 Tomcat, MySQL, redis,创建 docker-compose.yml
version: "3.0" services: tomcat: container_name: mytomcat # --name image: tomcat:8.0-jre8 ports: - "8080:8080" volumes: - "tomcatwebapps:/usr/local/tomcat/webapps" networks: - some_network # tomcat 服务依赖于 mysql 和 redis depends_on: - mysql - redis mysql: container_name: mysql image: mysql:5.7.32 ports: - "3306:3306" volumes: - "mysqldata:/var/lib/mysql" - "mysqlconf:/etc/mysql" environment: - MYSQL_ROOT_PASSWORD=1234 networks: some_network: redis: container_name: redis image: redis:5.0.10 ports: - "6379:6379" volumes: - "redisdata:/data" command: "redis-server --appendonly yes" networks: some_network: # 使用到的 volumes 和 networks 必须声明 volumes: tomcatwebapps: mysqldata: mysqlconf: redisdata: networks: # 声明名称为 “some_network” 的网络 some_network:
在 docker-compose.yml
所在路径执行 docker-compose up
启动 Compose 项目,它会下载使用到的镜像并在前台运行打印日志,可以使用 Ctrl + C 终止
如果需要后台运行执行 docker-compose up -d
,这时候使用 docker ps
可以看到 Compose 已经根据 yaml 创建了相关的容器,使用 docker-compose down
停止 Compse 并移除自动创建的网桥
使用 docker network ls
查看网络或者 docker volume ls
查看数据卷,Compose 定义的网络或数据卷名称格式为:docker-compose.yml所在文件夹的名称加上下划线再加上 yaml 中定义名称,如果在 "dockerfile" 文件夹下创建 yaml 文件并启动,那么网络名称为:dockerfile_some_network
tomcat 服务使用了 depends_on
,表示它依赖于 redis 和 mysql 服务,Compose 将优先启动它的依赖再启动它
命令梳理
Docker Compose 的命令与 Dokcer 类似,可以使用 --help 参数,就可以查询到到对应命令的使用方法
docker-compose --help
默认启动的模版文件名为 docker-compose.yml,可以使用 -f 指定自定义的模版文件
可以通过 config 命令,检查模版文件语法是否正确
docker-compse 也包含很多子命令:
启动停止相关:up, down, restart, stop, pasue, unpause
资源相关:ps, top, kill, run
进入容器:exec
查看日志:logs
很多子命令都可以在后面跟上某个具体的 service 名称,定向地操作,下面不一一举例,
可以使用docker-compose help
再跟上子命令名称,查询其用法
# 后台启动 yaml 定义的所有容器 docker-compose up -d # 仅启动 mysql 这个service,会启动其依赖的 service docker-compose up mysql 指定启动的server名称, # 停止容器并移除自动创建的网桥 docker-compose down # 重启所有 service 后面可以指定上某个具体的 service docker-compose restart # 暂停 和 恢复 docker-compose pause docker-compose unpause # 进入 redis 这个 service 使用 exit 退出 docker-compose exec redis bash # 列出当前 yaml 中定义的容器的信息 docker-compose ps # 删除当前 yaml 中定义的容器,需要先 stop,后面可以指定上某个具体的 service docker-compose rm # 查看各个 service 容器内运行的进程情况 docker-compose top # 查看日志默认查看 yaml 所有的,可以跟上具体 service # -f 可以保持跟踪,新的日志会马上显示在屏幕上 docker-compose logs
参考资料
curl 的用法指南
【编程不良人】Docker容器技术&Docker-Compose实战
到此这篇关于Docker Compose 实践及梳理的文章就介绍到这了,更多相关Docker Compose 实践内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
- docker-compose教程之安装使用和快速入门
- Docker compose部署SpringBoot项目连接MySQL及遇到的坑
- 解决使用Docker Compose管理容器的问题
- Docker Compose的安装和使用步骤
- Docker Compose一键ELK部署的方法实现
- docker compose入门helloworld的详细过程
Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本
通过 docker-compose 启动容器,报错:
ERROR: The Docker Engine version is less than the minimum required by Compose. Your current project requires a Docker Engine of version 1.10.0 or greater.
升级 Docker 过于麻烦,只能降 docker-compose 的版本。
先看一下我们已经安装的 Docker 版本:
[root@Redmine-186 docker-compose]# docker -v
Docker version 1.7.1, build 786b29d/1.7.1
经查 Docker Compose Github Docs,发现 docker-compose 1.5.2 版本是兼容 Docker 1.7.1 的:Note that Compose 1.5.2 requires Docker 1.7.1 or later.
。
好了,开始降级 docker-compose,先卸载:
# pip uninstall docker-compose
再安装指定版本:
# pip install docker-compose==1.5.2
至此,docker-compose 降版本成功!
docker-compose.yml 版本问题
解决完 docker-compse 版本问题适配之后,对着已有的 docker-compose.yml 执行 “,会提示不能正常识别 docker-compose.yml 文件中的内容。究其原因,是因为我们的 docker-compose 1.5.2 只支持 V1 版本的 docker-compose.yml ,那么好,把现在 V2 版本的 docker-compose.yml 改成 V1 版本的格式。
V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml。
先看文档:Compose file versions and upgrading。
V1 版本的 docker-compose.yml 文件格式主要区别就是:
- 没有开头的 version 声明
- 没有 services 声明
- 不支持 depends_on
- 不支持命名的 volumes, networks, build arguments 声明
- 其他我没用到的所以没细究的区别
附录
- How To Install Docker on CentOS 6
- Docker and docker-compose in CentOS 6
- 关于 pip 安装时提示 pkg_resources.DistributionNotFound 错误问题
- CentOS 升级 Python2.7
- ERROR: The Docker Engine version is less than the minimum required by Compose
- Docker Compose Github Docs
- Compose file versions and upgrading
我们今天的关于docker-compose 实践和docker compose实战的分享已经告一段落,感谢您的关注,如果您想了解更多关于25.docker compose 简介 和 docker-compose.yml 参数介绍、Docker Compose 和 Docker Swarm 和 Docker Service、Docker Compose 实践及梳理、Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本的相关信息,请在本站查询。
本文标签: