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 -suname -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 实践及梳理的更多相关文章

  1. Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中 ...

  2. Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...

  3. DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路

    2016 年1 月 23 日,北京史上气温最低的一天. 在下午 1 点半的时候,由 DaoCloud 赞助的 2016 年度首次 Docker Meetup 准时开始. 在这次Meetup中,我分享了 ...

  4. (转)Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html 我知道大家这段时间看了 ...

  5. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  6. Docker Compose 原理

    Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制.也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 do ...

  7. Docker 三剑客之 Docker Compose

    Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Dock ...

  8. Docker学习笔记之编写 Docker Compose 项目

    0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...

  9. 一文掌握Docker Compose

    目录 Docker Compose介绍 Docker Compose安装 Docker Compose基本示例 1.基本文件及目录设置 2.创建一个Dockerfile 3.通过docker-comp ...

随机推荐

  1. GooseFS助力大数据业务数倍提升计算能力

    前言 GooseFS是由腾讯云推出的一款分布式缓存方案,主要针对包括需要缓存加速的数据湖业务场景,提供基于对象存储COS服务的近计算端数据加速层. GooseFS 基于开源大数据缓存方案 Alluxi ...

  2. Windows协议 LDAP篇 - Actite Directory

    LDAP简介 先说下ldap,轻量目录访问协议.LDAP就是设计用来访问目录数据库的一个协议.也就是为了能访问目录数据库,ldap是其中一种协议 LDAP的基本模型 目录树:在一个目录服务系统中,整个 ...

  3. 面试官:MySQL 有哪些锁??

    大家好,我是小林. 这次,来说说 MySQL 的锁,主要是 Q&A 的形式,看起来会比较轻松. 不多 BB 了,发车! 在 MySQL 里,根据加锁的范围,可以分为全局锁.表级锁和行锁三类. ...

  4. Compile Java Codes in Linux Shell instead of Ant Script

    The following is frequently used ant script, compile some java source codes with a libary path, then ...

  5. docker 搭建kafka集群(入门版)

    1.环境 docker, docker-compose 2.zk-kafka.yml version: '3' services: zoo1: image: zookeeper:3.4.14 rest ...

  6. 原来一条select语句在MySQL是这样执行的《死磕MySQL系列 一》

    前言 看到蒋老师的第一篇文章后就收货颇丰,真是句句戳中痛点. 令我记忆最深的就是为什么知道了一个个技术点,却还是用不好 ?不管是蒋老师所说的Redis还是本系列要展开学习的MySQL. 这是一个值得思 ...

  7. PyCharm启动报错 TypeError: unsupported operand type(s) for /: ‘str’ and ‘str’ 解决

    这个提示大概是说:"类型错误:不支持操作类型为字符串和字符串",直接把两个字符串(BASE_DIR = os.path.dirname(os.path.dirname(os.pat ...

  8. js简单实现拦截访问指定网页

    最近闲的无事,写个脚本玩玩,实现拦截访问指定网址 浏览器插件 要想实现这个功能,就要自定义一个浏览器插件 最简单的浏览器插件有两个文件,分别是manifest.json和**.js.首先新建一个文件夹 ...

  9. npm压缩js文件

    参考:https://blog.csdn.net/msy_msy/article/details/78261383 1.压缩单个js文件 cnpm install uglify-js -g 安装 1& ...

  10. C#中使用WavHelper保存录音数据为wav文件

    C#将录音数据文件保存为wav格式文件,这里使用到的是WavHelper工具类. WavHelper工具类: using System; using System.Collections.Generi ...