Docker|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-composesudo 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:# 其中一个服务,服务名为:webappwebapp:# 指定该服务使用的镜像image: examples/web# 端口映射ports:- "80:80"# 数据卷volumes:- "/data"
简单上手 在一个 Compose 中启动 Tomcat, MySQL, redis,创建
docker-compose.yml
version: "3.0"services:tomcat:container_name: mytomcat # --nameimage: tomcat:8.0-jre8ports:- "8080:8080"volumes:- "tomcatwebapps:/usr/local/tomcat/webapps"networks:- some_network# tomcat 服务依赖于 mysql 和 redisdepends_on:- mysql- redismysql:container_name: mysqlimage: mysql:5.7.32ports:- "3306:3306"volumes:- "mysqldata:/var/lib/mysql"- "mysqlconf:/etc/mysql"environment:- MYSQL_ROOT_PASSWORD=1234networks:some_network:redis:container_name: redisimage: redis:5.0.10ports:- "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,会启动其依赖的 servicedocker-compose up mysql 指定启动的server名称,# 停止容器并移除自动创建的网桥docker-compose down # 重启所有 service 后面可以指定上某个具体的 servicedocker-compose restart# 暂停 和 恢复docker-compose pausedocker-compose unpause# 进入 redis 这个 service 使用 exit 退出docker-compose exec redis bash# 列出当前 yaml 中定义的容器的信息docker-compose ps# 删除当前 yaml 中定义的容器,需要先 stop,后面可以指定上某个具体的 servicedocker-compose rm# 查看各个 service 容器内运行的进程情况docker-compose top# 查看日志默认查看 yaml 所有的,可以跟上具体 service# -f 可以保持跟踪,新的日志会马上显示在屏幕上docker-compose logs
参考资料
curl 的用法指南
【编程不良人】Docker容器技术&Docker-Compose实战
【Docker|Docker Compose 实践及梳理】到此这篇关于Docker Compose 实践及梳理的文章就介绍到这了,更多相关Docker Compose 实践内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 使用composer自动加载类文件
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- 六项精进20180530
- 数据库|SQL行转列方式优化查询性能实践
- 【Day31课后实践】
- docker镜像探索----dive工具
- 2021—3—8日教练实践总结&呼吸练习&觉察日记
- 湖州大学生实践团开展系列活动践行生态文明理念
- 好的思维需要实践