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 ...

  10. 【08】循序渐进学 docker:docker compose

    写在前面的话 在之前的操作中,即使是单个容器每次都需要敲很长的命令,当需要多个容器组合着用的时候更加麻烦,此时我们急需找到一种一次配置,随便运行的方法. 这就是这一节重点,单机容器编排工具:docke ...

随机推荐

  1. gpgcheck

    warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY Public key for co ...

  2. RAM云存储已经出现了,就是特别贵

    据说bat有这种全内存的服务器集群, RAM的问题是,容量上去了就会很费电,而且不方便做持久化,并且成本也不低,一般只能作为缓存.内存数据库,给bat.12306这种高富帅用 也有提供内存云存储的服务 ...

  3. JQuery中两个ul标签的li互相移动实现方法

    这篇文章主要介绍了JQuery中两个ul标签的li互相移动实现方法,可实现ul标签中li标签内容相互替换的技巧,涉及jQuery操作页面元素的相关技巧,需要的朋友可以参考下 本文实例讲述了JQuery ...

  4. iOS8 UILocalNotification 添加启动授权

    猴子原创.欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46810357 ...

  5. java基础——字符串中的反转Reverse问题(面试必备)

    由于研究了关于字符串(String)的问题,今年就在这里总结一下,首先说一下有关于面试,我想的是,需要一定的技能,比方说,大家想到这个反转问题,肯定能说上了,只不过是你说的一般人都知道,要想在面试中更 ...

  6. 数据库部分(MySql)_2

    分组查询 分组查询通常和聚合函数结合使用,查询条件中每个XXX就以XXX为分组的条件: 格式:每个A的平均B select avg(B) from 表名 group by A; having 在whe ...

  7. 亲自打造Deferred对象

    经过对比之后,决心学习jQuery,自己打造一个Deferred对象.var util = require('./util.js');function Callbacks() { var list = ...

  8. Eclipse生成部署描述符(web.xml)

    右键点击你的web项目名--->Java EE Tools-->Generate Deployment  Descriptor Stub 要想自动生成,只需在创建web项目时,把最后一页的 ...

  9. ORB_SLAM2 源码阅读 ORB_SLAM2::Initializer

    ORB_SLAM2::Initializer 用于单目情况下的初始化. Initializer 的构造函数中传入第一张影像,这张影像被称作 reference frame(rFrame).在获得第二张 ...

  10. PHP安全编程:register_globals的安全性

    如果你还能记起早期Web应用开发中使用C开发CGI程序的话,一定会对繁琐的表单处理深有体会.当PHP的register_globals配置选项打开时,复杂的原始表单处理不复存在,公用变量会自动建立.它 ...