DockerCompose是用来定义以及运行多容器应用的工具.
Docker官方推荐使用DockerCompose来构建开发环境的服务,不推荐在生产环境当中使用.
当前微服务架构盛行,我们不可能为每个依赖的服务搭建一套环境,创建容器以及镜像.当我们迫切的需要一个工具解决我们开发环境的复杂性,达到一键运行的目的,因此DockerCompose就出现了.
本文是接着上篇文章的例子进行操作,请最好阅读完Docker:实战操作–安装与基础操作来保证你对本章的理解.
直接通过下载安装:
sudo -i #获取sudo权限防止curl命令写入权限不足
curl -L https://github.com/docker/compose/releases/download/1.3.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose.yml文件是用来构建服务的配置文件.
docker-compose.yml文件中定义的每个服务必须要指定image
或build
的参数.
1.image
:镜像的名称,标签或者部分ID
2.build
:包含一个Dockerfile构建的目录.
3.command
:重写执行命令.
4.links
:链接服务中的容器到另一个容器
5.external_links
:链接外部容器(不在该docker-compose.yml配置内或不是Compose启动的容器)
6.extra_hosts
:IP域名映射
7.ports
:端口映射到主机
8.volumes
:挂载点映射
9.volumes_from
:卷积映射从另一个容器或服务的映射,形式与上一边所讲的一致
10.environment
:定义一些系统环境变量
11.extends
:主要是用于依赖文件关系的继承
common.yml:
webapp:
build: ./webapp
environment:
- DEBUG=false
- SEND_EMAILS=false
development.yml
web:
#指明需要继承
extends:
#文件所在路径
file: common.yml
#服务名称
service: webapp
ports:
- "8000:8000"
links:
- db
#覆盖重写
environment:
- DEBUG=true
db:
image: postgre
12.net
:指定网络连接规则
13.labels
:使用字典或者数组定义源数据,可以数组也可以字典,防止标签冲突,推荐使用域名反写加上key
labels:
- "com.example.description=Accounting webapp"
#或者
labels:
com.example.description: "Accounting webapp"
接着上篇文章的例子,定义如下文件.
#定义web服务
web:
#定义构建的目录,该目录下有Dockerfile,app.py,requirements三个文件
build: ~/pt
#定义端口映射
ports:
- "5000:80"
#将当前的目录挂载到容器当中,方便代码修改后直接访问容器观察效果
volumes:
- .:/code
links:
- redis
#定义redis服务
redis:
#从镜像拉取redis服务
image: redis
运行如下命令会自动构建定义的服务:拉取redis镜像以及根据build目录读Dockerfile定义的规则构建服务.
-d参数标明需要检测是否自动创建,如果已经创建不会再创建.
sudo docker-compose -d up
当操作Compose运行了服务后,我们可以进行扩容:
sudo docker-compose scale web=2
上述例子我们将web扩容为2个.
有时候我们需要运行Compose配置文件当中单独的一个服务.
例如我们单独运行web服务不运行redis服务.
sudo docker-compose run --no-deps web
除此之外还有一些常用的操作,ps(列出容器),restart,kill,build(只构建),up(创建并运行),rm(删除停止的容器),kill(停止容器).