Docker Compose 实践及梳理
Docker Compose 可以实现 Docker 容器集群的编排,可以通过 docker-compose.yml 文件,定义我们的服务及其需要的依赖,轻松地运行在测试、生产等环境
文档
Compose file version 3 reference
安装 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 实践及梳理的更多相关文章
- Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践
Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中 ...
- Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...
- DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路
2016 年1 月 23 日,北京史上气温最低的一天. 在下午 1 点半的时候,由 DaoCloud 赞助的 2016 年度首次 Docker Meetup 准时开始. 在这次Meetup中,我分享了 ...
- (转)Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践
http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html 我知道大家这段时间看了 ...
- Docker Compose编排工具部署lnmp实践及理论(详细)
目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...
- Docker Compose 原理
Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制.也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 do ...
- Docker 三剑客之 Docker Compose
Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Dock ...
- Docker学习笔记之编写 Docker Compose 项目
0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...
- 一文掌握Docker Compose
目录 Docker Compose介绍 Docker Compose安装 Docker Compose基本示例 1.基本文件及目录设置 2.创建一个Dockerfile 3.通过docker-comp ...
随机推荐
- 洛谷P2504题解
题目 瓶颈生成树的裸题.可以查看这个来获取更多信息. 他问的是能够在所有树上自由穿梭的猴子个数,那我只需要算出这张图上最小生成树中权值最大的边,和每个猴子的最大跳跃长度进行比较即可. 因为我用的是 \ ...
- MIPS Pwn赛题学习
MIPS Pwn writeup Mplogin 静态分析 mips pwn入门题. mips pwn查找gadget使用IDA mipsrop这个插件,兼容IDA 6.x和IDA 7.x,在ID ...
- 最全总结 | 聊聊 Python 数据处理全家桶(PgSQL篇)
1. 前言 大家好,我是安果! Python 数据处理全家桶,截止到现在,一共写过 6 篇文章,有兴趣的小伙伴可以去了解一下! 最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇) 最全 ...
- CentOS帮助类语法
目录 一.man获取帮助信息 二.help获得shell内置命令的帮助信息 三.history查看所有命令历史 补充:Linux常用快捷键 一.man获取帮助信息 基本语法:man [命令或配置文件] ...
- 某次无中生有的getshell过程
0x01 写在前面 某次对目标的渗透中,发现了疑似前台上传漏洞,反复测试后无法成功利用,多方探寻最终成功getshell的过程. 0x02 信息收集 这次的目标是一个APP分发平台,对这一类的网站接触 ...
- Ajax 局部刷新 异步提交
AJAX简介 局部刷新,异步提交. AJAX 不是新的编程语言,而是一种使用现有标准的新方法.它最大的有点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容. 浏览器朝后端发送请 ...
- BZOJ 4826 影魔
本题可以采用主席树的在线做法,只不过常数会 \(super\) 大. 和其他题解差不多,我们先要求出第 \(i\) 个数的 \(l_i\) 和 \(r_i\) ,其中 \(l_i\) 表示左边第一个比 ...
- GithubSearch
https://docs.github.com/cn/github/searching-for-information-on-github/searching-on-github/searching- ...
- VirtualBox-虚拟硬盘扩容-win7
问题: 我在VirtualBox下搭建的win7系统只设置了一个C盘,当初只给硬盘分配32G,如今深受生活的毒打,发现只剩5G可用,装个PS都费劲. 我要扩容,扩容! 当前环境: VirtualBox ...
- HttpURLConnection 中Cookie 使用
方式一: 如果想通过 HttpURLConnection 访问网站,网站返回cookie信息,下次再通过HttpURLConnection访问时,把网站返回 cookie信息再返回给该网站.可以使用下 ...