Docker笔记(十二):Docker Compose入门
1. Compose简介
Docker Compose是Docker官方的用于对Docker容器集群实现编排,快速部署分布式应用的开源项目。Docker Compose通过docker-compose.yml文件来定义一组相关联的应用容器的编排,这组相关联的应用容器一般通过互相交互作为一个整体项目提供服务,比如一个Web项目,既包含业务服务容器,也包含数据库服务容器与缓存服务容器等。
Compose中两个重要的概念:
- 服务(service): 包含多个运行相同镜像的容器实例 
- 项目(project): 由一组关联的应用容器(服务)组成一个完整的业务服务单元,在docker-compose.yml(即Compose的模板文件)中定义 
Copmpose项目由Python编写,通过调用Docker服务提供的API来对容器进行管理。Compose默认的管理对象是项目,可以通过子命令对项目中的一组容器进行生命周期管理。
2. Compose安装
在macOS与Win10下,Docker安装自带了docker-compose的二进制文件,可以直接使用。
Linux下,
[root@iZwz ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose [root@iZwz ~]# chmod +x /usr/local/bin/docker-compose
验证
[root@iZwz ~]# docker-compose version
docker-compose version 1.24., build 4667896b
docker-py version: 3.7.
CPython version: 3.6.
OpenSSL version: OpenSSL 1.1.0j Nov
3. Compose模板文件
模板文件是使用Compose的核心,定义了一组相关联的应用容器,使之构成一个项目,里面大部分指令跟docker run相关参数的含义是类似的。默认的模板文件名称为docker-compose.yml,为YAML格式,如
version: '3'
services:
web:
build: .
depends_on:
- db
- redis redis:
image: redis db:
image: mysql
Compose模板文件可以动态读取主机的系统环境变量与当前目录下.env文件中的变量,通过${xx}引用。
模板文件中的常用指令说明
- build 
 指定Dockerfile所在文件夹的路径,可以是绝对路径或相对模板文件的路径。Compose将会自动构建镜像,然后使用该镜像。也可以通过如下方式详细指定。cache_from指定构建镜像的缓存- build: 
 context: ./dir
 dockerfile: Dockerfile-alternate
 args:
 buildno: 1
 cache_from:
 - alpine:latest
 - corp/web_app:3.14
- command 
 覆盖容器启动后默认执行的命令。
- container_name 
 Compose默认会使用 项目名称服务名称序号的格式作为容器名称。一般不需要特别指定,因为指定具体名称后,服务将无法进行扩展(scale),因为不允许多个容器具有相同的名称。
- depends_on 
 解决容器的依赖、启动先后顺序的问题,但是服务不会等待依赖的服务“完全启动”之后才启动。
- env_file 
 指定环境变量定义文件,可以为单独文件路径或列表,当与environment中有同名冲突时,以environment为准。
- environment 
 设置环境变量,支持数组或字典两种格式。只有名称的变量会自动获取运行Compose主机上的对应变量的值,以防止信息泄露- environment: 
 RACK_ENV: development
 SESSION_SECRET: environment:
 - RACK_ENV=development
 - SESSION_SECRET
- expose 
 暴露端口,不映射到宿主机,只被连接的服务访问
- healthcheck 
 通过命令检查容器是否健康运行,如- healthcheck: 
 test: ["CMD", "curl", "-f", "http://localhost"]
 interval: 1m30s
 timeout: 10s
 retries: 3
- image 
 指定镜像名称或镜像ID,所有服务都必要要么通过build,要么通过image来指定镜像。
- labels 
 为容器添加Docker元数据信息
- network_mode 
 设置网络模式,与docker run的–network一样,如bridge,host,none等,也可以是如下形式- network_mode: "service:[service name]" 
 network_mode: "container:[container name/id]"
- networks 
 配置容器连接的网络,如- services: 
 service1:
 networks:
 - some-network
 - other-network
 networks:
 some-network:
 other-network:
- ports 
 暴露端口信息,遵循端口映射规则。
- secrets 
 存储敏感数据,如密码等信息- mysql: 
 image: mysql
 environment:
 MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
 secrets:
 - db_root_password
 - my_other_secret secrets:
 my_secret:
 file: ./my_secret.txt
 my_other_secret:
 external: true
- volumes 
 容器的数据卷挂在路径设置,可以设置多个,与docker -v类似,如- volumes: 
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro
4. Compose命令
Compose命令默认是针对项目本身,也可以指定为项目中的服务或容器。
docker-compose 命令的基本使用格式为
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
命令选项
- -f, –file 指定模板文件,默认为docker-compose.yml,可多次指定 
- -p, –project-name 指定项目名称,默认为所在目录名称 
- –x-networking 使用Docker的可插拔网络特性 
- –x-networking-driver 指定网络驱动,默认为bridge 
- –verbose 输出更多调试信息 
- -v, –version 打印版本信息 
命令使用说明
- build 格式为 - docker-compose build [options] [SERVICE...],构建项目中的服务容器,选项包括 –force-rm(删除构建过程中的临时容器),–no-cache(构建镜像过程不使用cache),–pull(始终尝试通过pull来获取最新版本镜像)
- config 验证模板文件格式是否正确 
- down 停止up命令启动的容器,并移除网络 
- exec 进入指定的容器 
- images 列出compose文件中包含的镜像 
- kill 格式为 - docker-compose kill [options] [SERVICE...],强制停止服务容器
- logs 格式为 - docker-compose logs [options] [SERVICE...],查看服务容器的输出
- pause 格式为 - docker-compose pause [SERVICE...], 暂停一个服务容器
- port 格式为 - docker-compose port [options] SERVICE PRIVATE_PORT,打印容器端口所映射的公共端口,–index=index(指定容器序号,默认为1)
- ps 格式为 - docker-compose ps [options] [SERVICE...],列出项目中目前的所有容器
- pull 格式为 - docker-compose pull [options] [SERVICE...],拉去服务依赖的镜像
- push 推送服务依赖的镜像到Docker镜像仓库 
- restart 重启项目中服务,格式为 - docker-compose restart [options] [SERVICE...]
- rm 删除所有停止的服务容器,格式 - docker-compose rm [options] [SERVICE...], -f(强制直接删除)
- run 在指定服务上执行一个命令,不会自动创建端口,以避免冲突 
- scale 格式 - docker-compose scale [options] [SERVICE=NUM...],设置指定服务运行的容器个数,少则新建,多则删除
- start 格式 - docker-compose start [SERVICE...],启动已经存在的服务容器
- stop 停止运行中的容器 
- top 查看各个服务容器内运行的进程 
- unpause 格式 - docker-compose unpause [SERVICE...],恢复处于暂停状态的服务
- up 格式 - docker-compose up [options] [SERVICE...],尝试自动完成包括构建镜像,创建服务,启动服务,关联服务相关容器的一系列操作,大部分时候都可以通过该命令来启动一个项目,-d(在后台启动所有容器)。- docker-compose up --no-recreate只启动处于停止状态的容器,忽略已经运行的服务,- docker-compose up --no-deps -d <SERVICE_NAME>重新创建服务,但不影响到它所依赖的服务
5. 总结
Compose是Docker官方的服务容器编排工具,对一些简单的但包含多个组件的服务可以借助Compose来快速搭建环境,如开源的错误监控系统sentry,包括sentry服务本身,redis,postgres。对于业务生产环境,则一般使用功能更为丰富的第三方编排系统如Kubernetes来部署。
欢迎关注我的微信公众号:jboost-ksxy
Docker笔记(十二):Docker Compose入门的更多相关文章
- 《C++游戏开发》笔记十二 战争迷雾:初步实现
		本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ... 
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
		python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ... 
- Go语言学习笔记十二: 范围(Range)
		Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ... 
- DirectX11笔记(十二)--Direct3D渲染8--EFFECTS
		原文:DirectX11笔记(十二)--Direct3D渲染8--EFFECTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737 ... 
- Docker笔记--ubuntu安装docker
		Docker笔记--ubuntu安装docker 1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选) sudo cp /etc/apt/sources.list /etc/apt/sourc ... 
- Docker笔记(二):Docker管理的对象
		原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html 在Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像.容器. ... 
- Docker(二十二)-Docker Swarm常用命令
		#查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ... 
- java jvm学习笔记十二(访问控制器的栈校验机制)
		欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ... 
- Docker进阶之二:Docker内部组件
		Docker内部组件 一.Namespaces 命名空间,Linux内核提供的一种对进程资源隔离的机制,例如进程,网络,挂载点等资源. docker run -d busybox ping ba ... 
- Docker笔记一:Docker介绍
		目录 什么是Docker? Docker的核心概念 Docker镜像命令 Docker容器命令 Docker实战 查看我的镜像 启动Redis Docker中国镜像加速 血与泪的教训 什么是Docke ... 
随机推荐
- 手写OOXML文档——导出xlsx格式表格文档
			一.准备工作: 2个js库,另外把样式文件抽离出来 require('file-saver'); import JSZip from 'jszip' import {stylesData,theme1 ... 
- 域渗透基础之Windows 2012创建域控制器
			创建备份域控制器 这里就拿windows 2012 R2来当备份域控 如果一个域内有多个域控制器,可以有如下好处. 提高用户登录的效率:如果同时有多台域控制器对客户提供服务,可以分担审核用户登录身份( ... 
- 常用windows命令
			目录 本教程概述 用到的工具 标签 简介 1.cmd的一些规则 2.cd切换目录命令 3.dir显示目录命令 4.type显示文本内容 5.del 删除文件 6.查看IP地址 7.net 命令 8.n ... 
- PHP compact
			1.函数的作用:将变量转成数组 2.函数的参数: @params string $varname1 @params string $varname2 ... @params array $varnam ... 
- python学习-模块与包(九)
			9.4查看模块内容 dir(): 返回模块或类所包含的全部程序单元(包括变量.函数.类和方法等) __all__:模块本身提供的变量,不会展示以下划线开头的程序单元.另使用from xx import ... 
- 15.Linux软件管理
			1.什么是rpm? rpm软件包的组成部分有哪些? redhat packages manager 红帽推出软件包管理工具... rpm工具 xxxxx.rpm bash-4.2.46-28.el7. ... 
- 百万年薪python之路  --  前端CSS样式
			CSS样式 控制高度和宽度 width宽度 height高度 块级标签能设置高度和宽度,而内联标签不能设置高度和宽度,内联标签的高度宽度由标签内部的内容来决定. 示例: <!DOCTYPE ht ... 
- JVM 垃圾收集与内存分配
			判断对象是否还活着 引用计数法 给对象添加引用计数器,添加加1,引用失效减1,如果为0就是不可使用的.问题是不能解决互相引用带来的问题 可达性分析法 以GC Roots为起点,判断到一个对象是否有引用 ... 
- 在.net core3.0中使用SignalR实现实时通信
			最近用.net core3.0重构网站,老大想做个站内信功能,就是有些耗时的后台任务的结果需要推送给用户.一开始我想简单点,客户端每隔1分钟调用一下我的接口,看看是不是有新消息,有的话就告诉用户有新推 ... 
- Java基础(四)注释
			1.类注释 类注释必须放在import语句之后,类定义之前.eclipse中使用Shift + Alt + J快捷键添加类注释. 2.方法注释 每一个方法注释必须放在所描述的方法之前.除了通用标记之外 ... 
