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.14command
覆盖容器启动后默认执行的命令。container_name
Compose默认会使用 项目名称服务名称序号的格式作为容器名称。一般不需要特别指定,因为指定具体名称后,服务将无法进行扩展(scale),因为不允许多个容器具有相同的名称。depends_on
解决容器的依赖、启动先后顺序的问题,但是服务不会等待依赖的服务“完全启动”之后才启动。env_file
指定环境变量定义文件,可以为单独文件路径或列表,当与environment中有同名冲突时,以environment为准。environment
设置环境变量,支持数组或字典两种格式。只有名称的变量会自动获取运行Compose主机上的对应变量的值,以防止信息泄露environment:
RACK_ENV: development
SESSION_SECRET: environment:
- RACK_ENV=development
- SESSION_SECRETexpose
暴露端口,不映射到宿主机,只被连接的服务访问healthcheck
通过命令检查容器是否健康运行,如healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3image
指定镜像名称或镜像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: truevolumes
容器的数据卷挂在路径设置,可以设置多个,与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 ...
随机推荐
- Fiddler的安装
相关下载软件(链接:https://pan.baidu.com/s/1HFdFNph6FGHOFtZq09ldpg 提取码:3u3l ) fiddler是基于.net环境的,所以需要先安装.net 安 ...
- phpstorm格式设置不同导致的Git代码无法正常比较
多人开发代码,使用Git作为管理工具,遇到一个问题是 : IDE的格式设置不一样导致的整个文件无法正常的比较. window 和 linux 以及 mac 不同平台的换行符是导致这一个问题比较常见的原 ...
- [Luogu1313][NOIP2011提高组]计算系数
题目描述 给定一个多项式 (by+ax)k(by+ax)^k(by+ax)k ,请求出多项式展开后 xn×ymx^n \times y^mxn×ym 项的系数. 输入输出格式 输入格式: 共一行,包含 ...
- sql优化提速整理
sql优化提速整理 场景描述 在我们实际开发中,随着业务的不断增加,数据量也在不断的攀升,这样就离不开一个问题:数据查询效率优化 根据自己的以往实际项目工作经验和学习所知,现在对SQL查询优化做一个简 ...
- 使用css把placeholder值渐渐消失
复制过去就行了,不要问我为什么,就两个字爽快input:focus {outline: none; } input:focus::-webkit-input-placeholder {text-ind ...
- vue,element列表大数据卡顿问题,vue列表渲染慢,element表格渲染慢,表格渲染慢(卡),表格全选卡
https://github.com/livelyPeng/pl-table 一个表格组件(完美解决万级数据渲染卡顿问题),流畅渲染万级数据并不会影响到el-table的原有功能 分析: 前端UI框架 ...
- 基于redis解决session分布式一致性问题
1.session是什么 当用户在前端发起请求时,服务器会为当前用户建立一个session,服务器将sessionId回写给客户端,只要用户浏览器不关闭,再次请求服务器时,将sessionId传给服务 ...
- 数据结构(十六)模式匹配算法--Brute Force算法和KMP算法
一.模式匹配 串的查找定位操作(也称为串的模式匹配操作)指的是在当前串(主串)中寻找子串(模式串)的过程.若在主串中找到了一个和模式串相同的子串,则查找成功:若在主串中找不到与模式串相同的子串,则查找 ...
- 解决node.js使用fs读取文件出错
今天配接口,使用fs模块读取json出现了错误'no such file or directory',然后经查终于解决,特此记录. 使用nodejs的fs模块读取文件时习惯用相对路径,但是运行的时 ...
- C++学习笔记11_STL
STL又叫标准模板库,提供各种容器. STL是C++一部分,不休要额外安装什么,它被内建在编译器之内. STL重要特点是,数据结构和实现分离. *所谓迭代器,类似一个游标,使用++指向下一个元素,使用 ...