Docker Compose是Docker官方的用于对Docker容器集群实现编排,快速部署分布式应用的开源项目。Docker Compose经过docker-compose.yml文件来定义一组相关联的应用容器的编排,这组相关联的应用容器通常经过互相交互做为一个总体项目提供服务,好比一个Web项目,既包含业务服务容器,也包含数据库服务容器与缓存服务容器等。mysql
Compose中两个重要的概念:git
服务(service): 包含多个运行相同镜像的容器实例github
项目(project): 由一组关联的应用容器(服务)组成一个完整的业务服务单元,在docker-compose.yml(即Compose的模板文件)中定义 web
Copmpose项目由Python编写,经过调用Docker服务提供的API来对容器进行管理。Compose默认的管理对象是项目,能够经过子命令对项目中的一组容器进行生命周期管理。redis
在macOS与Win10下,Docker安装自带了docker-compose的二进制文件,能够直接使用。
Linux下,sql
[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
验证 docker
[root@iZwz ~]# docker-compose version docker-compose version 1.24.1, build 4667896b docker-py version: 3.7.3 CPython version: 3.6.8 OpenSSL version: OpenSSL 1.1.0j 20 Nov 2018
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
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>
从新建立服务,但不影响到它所依赖的服务
Compose是Docker官方的服务容器编排工具,对一些简单的但包含多个组件的服务能够借助Compose来快速搭建环境,如开源的错误监控系统sentry,包括sentry服务自己,redis,postgres。对于业务生产环境,则通常使用功能更为丰富的第三方编排系统如Kubernetes来部署。
欢迎关注个人微信公众号:jboost-ksxy