你该知道的Docker-compose
Docker-compose介绍
前几篇文章和小伙伴们,分享了使用Dockerfile
来构建镜像,使用docker run
等命令来手动启动镜像、docker stop
停止镜像、docker kill
杀死镜像进程。这种情况只适用于镜像服务不多的情况。然而,现实情况是我们可能同时启停操作成百上千的服务,而且还要在启动之前分析各个服务之间的前后依赖关系,如果此时还是使用手动的方式来操作显然是不现实的。于是docker-compose
应运而生。接下来我们就来看看docker-compose
。
什么是docker-compose
Compose
是用于定义和运行多容器 Docker
应用程序的工具。通过Compose
,我们可以使用YML
文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML
文件配置中创建并启动所有服务。
简单来说,就是在一个叫做YML
文件中,将你的镜像服务按照一定的规则,进行定义、排列、配置。然后使用compose
提供的命令,一键启动整个服务群的工具。
安装
执行如下命令进行安装docker-compose
,此命令会根据你的系统匹配合适的docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
给安装的脚本赋予执行权限
chmod +x /usr/local/bin/docker-compose
检查安装结果
docker-compose --version
终端输出如下内容表示安装成功
docker-compose version 1.26.2, build eefe0d31
❝
MacOs和windows的小伙伴不用单独安装
Compose
,因为安装docker
桌面版的时候已经自带了docker-compose
❞
docker-compose
命令
docker-compose
和docker
一样也有自己的一套命令,下面我们就经常用到的进行说明。
docker-compose up`: 启动所有容器(在docker-compose中定义)
❝
参数说明
docker-compose up -d
:在后台启动所有容器
docker-compose -f docker-compose模板 up -d
:指定docker-compose
并在后台启动❞
docker-compose ps
: 查看项目中运行着的容器docker-compose stop
: 停止正在运行的容器docker-compose start
:启动stop
了的容器docker-compose down
: 停止并删除容器、网络、卷、镜像
❝
参数说明
docker-compose down
-v: 删除已经在compose
文件中定义的和匿名的附在容器上的数据卷❞
docker-compose logs
: 查看服务容器输出的日志docker-compose restart
: 重启项目中的服务docker-compose rm
: 删除所有(停止状态的)服务容器
❝
强调:首先需要执行
docker-compose stop
,将服务停止后,在执行该命令❞
docker-compose config
: 查看项目配置docker-compose version
: 打印版本信息
compose
版本
下图是在docker
官网中的一张compose
和docker
版本对应图,大家可以看到不同的docker
引擎的版本对应不同的Compose
版本,那么这个有什么用呢?这个在我们编写docker-compose.yml
文件大有用处。

何为服务编排
Compose
允许用户通过一个docker-compose.yml
模板文件(YAML
格式)来定义一组相关联的应用容器为一个项目(project
),即将不同服务通过一个模本文件组装为一个项目。
Compose
模板文件是一个定义服务、网络和卷的YAML
文件
Docker-Compose
标准模板文件应该包含version
、services
、networks
三大部分
编写模板文件
上文提到,一个标准的docker-compose
文件,应该包含version
、services
、networks
三大部分,下来看一个docker-compose.yml
样例。下文样例是借助极客时间专栏es作者阮一鸣老师的模板,我稍加改造后的。下篇文章我们会编写自己的docker-compose.yml
文件,编排我们自己的服务。
version: '3.8'
services:
cerebro:
image: lmenezes/cerebro:0.8.3
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://elasticsearch:9200
networks:
- es7net
kibana:
image: docker.elastic.co/kibana/kibana:7.8.0
container_name: kibana7
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- es7net
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es7_01
environment:
- cluster.name=triumphxx
- node.name=es7_01
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01,es7_02
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- es7net
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es7_02
environment:
- cluster.name=triumphxx
- node.name=es7_02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01,es7_02
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data2:/usr/share/elasticsearch/data
networks:
- es7net
volumes:
es7data1:
driver: local
es7data2:
driver: local
networks:
es7net:
driver: bridge
❝
可以看到,这个模板文件的主体部分包含:
version
: 兼容docker
版本的Compose
文件格式版本,services
:需要编排的服务volumes
:数据卷挂载路径设置networks
:网络定义。
service
下首先需要指定,服务的名称,服务所用到的镜像以及定义启动容器的名称、映射端口、容器启动后执行的命令和连接的网络。
elasticsearch
服务配置稍微复杂一些,还设置了运行环境,包括:集群名称、节点名称、jvm
参数、以及ES
集群配置,限制设置,这部分我们会在在讨论es
的文章中专题讨论,小伙伴们,没有明白也不用着急。
volumes
定义了俩个数据卷挂载路径,分别给俩个es
服务使用
networks
定义网络模式为bridge
名称为es7net
的网络,启动的四个服务都会连接上这个网络❞
启动项目
docker-compose.yml
文件编写完成后,我们就可以执行进入到yml
文件目录下执行docker-compose up
目命令来启动项目。
❝
在启动的过程中,
Compose
会检查本地是否有项目中使用的镜像,如果没有,会自动去docker hub
拉取镜像。❞
小结
好啦,小伙伴们,本文我们介绍了,说明是docker-compose
以及常用的命令,并且分析了一个Compose
文件应该怎么书写。希望大家有所收获。下篇文章进行实战,将一个SpringCloud
的服务进行编排。欢迎持续关注。

你该知道的Docker-compose的更多相关文章
- 什么,容器太多操作不过来?我选择Docker Compose梭哈
接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...
- 每个JavaScript开发人员应该知道的33个概念
每个JavaScript开发人员应该知道的33个概念 介绍 创建此存储库的目的是帮助开发人员在JavaScript中掌握他们的概念.这不是一项要求,而是未来研究的指南.它基于Stephen Curti ...
- PHP开发者该知道的5个Composer小技巧
Composer 是新一代的PHP依赖管理工具.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单 co ...
- Docker深入浅出系列 | Docker Compose多容器实战
目录 前期准备 Docker Compose是什么 为什么要用Docker Compose Docker Compose使用场景 Docker Compose安装 Compose Yaml文件结构 C ...
- Sentry 监控 - 私有 Docker Compose 部署与故障排除详解
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Docker从入门到精通(八)——Docker Compose
恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具. 1.为什么需要 Docker Compose? 官网镇楼:https://www.runoo ...
- 5种常见的Docker Compose错误
在构建一个容器化应用程序时,开发人员需要一种方法来引导他们正在使用的容器去测试其代码.虽然有几种方法可以做到这一点,但 Docker Compose 是最流行的选择之一.它让你可以轻松指定开发期间要引 ...
- 程序员必须要知道的Hadoop的一些事实
程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...
- 【转载】在IT界取得成功应该知道的10件事
在IT界取得成功应该知道的10件事 2011-08-11 13:31:30 分类: 项目管理 导读:前面大多数文章都是Jack Wallen写的,这是他的新作,看来要成为NB程序员还要不停的自我总结 ...
- Docker compose学习笔记
一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...
随机推荐
- ATM + 购物车项目
''' 存放配置文件 ''' import os #获取项目根目录 BASE_PATH=os.path.dirname(os.path.dirname(__file__)) #获取用户目录 USER_ ...
- Layui数据表格动态加载操作按钮
效果: 方法一:绑定模版选择器 <div class="layui-card"> <div class="layui-card-body layui-r ...
- rabbitmq部署及配置与验证
1. 场景描述 朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql.Reids.Es.RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以 ...
- 关于点击input框唤醒键盘导致input被遮盖的问题
关于点击input框唤醒键盘导致input被遮盖的问题 这个问题相信大家在实际开发过程当中都有遇见,我自己也遇见过很多次.之前在百度上看见大多数的方法利用的都是键盘唤醒了之后,页面的实际高度会发生变化 ...
- shell专题(四):Shell中的变量
4.1 系统变量 1. 常用系统变量 $HOME.$PWD.$SHELL.$USER等 2.案例实操 (1)查看系统变量的值 [atguigu@hadoop101 datas]$ echo $HOME ...
- tensorflw-gpu 运行 。py程序出现gpu不匹配的问题
安装好了tensorflow-gpu版本,然后程序中写好了 with tf.device('/gpu:0'): 但是python3 .py程序时还是有错误. 报错为: 2018-04-24 12: ...
- Idea 自定义快捷代码输入 如syso => System.out.println()
前言 之前一直用的Eclipse System.out.println()的快捷代码输入 是 syso,但是在Idea 不好使用了,后来搜索了一番才知道,在Idea中的快捷输入是 sout,这里我就想 ...
- ajax配合art-template模板引擎的使用
最近才接触js的模板引擎听说相比以前使用的js foreach加载后台返回的json数据简便很多而且效率方面也很不错.今天自己玩了一下 后台使用的是.net mvc,数据库脚本就不提供了,返回的Jso ...
- ztree : 增删改功能demo与自定义DOM功能demo的结合
最近有个项目要用ztree,需要用ztree自带的功能(增删改),也需要自定义DOM的功能(置顶). ztree的demo里有增删改的demo,也有自定义DOM的demo,但没有两者结合的. 所以我把 ...
- 使用Thanos实现Prometheus指标联邦
本文来自Rancher Labs Prometheus是CNCF中已经毕业的项目之一,主要用于监控和告警.在Kubernetes生态中,它是应用最为广泛的监控和告警工具之一.Rancher用户可以通过 ...