虽然我们上一篇通过Dockerfile可以很很方便的创建一个属于自己的镜像,但是我们不难发现通过docker run命令的方式启动多个容器的时候还是比较繁琐的,几十上百个微服务节点要通过docker run方式来启动的话,估计再好的运维人员也有敲错命令的时候。
这里我们再来研究一个容器编排方式DockerCompose。
centos下:
安装:
yum -y install epel-release
yum -y install python-pip
pip install docker-compose
docker-compose version
卸载:
rm /usr/local/bin/docker-compose
pip uninstall docker-compose
ubuntu下:
下载:
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
授权:
sudo chmod +x /usr/local/bin/docker-compose
检查:
docker-compose --version
DockerCompose编排命令:
image:指定镜像tag或者ID
image: redis
image: 19ce95cb7258
image: name/version
build:用来指定一个包含Dockerfile文件的路径,从这个命令可以看出DockerCompose也可以自动先创建镜像后创建容器。
build: ./dir
build:
context:./dir
dockerfile:dockerfileName
args:
-key=value //这个对应dockerfile里的arg
links:用于连接另一个容器服务,同dockerrun –line,主要影响到容器中的网络
links:
-db
-db:mysql
-web
自动在容器/etc/hosts文件里添加
192.168.226.133 db
192.168.226.133 mysql
192.168.226.134 web
ports:用于暴露端口,同docker run –p
ports:
- “1111”
- “1112:1113”
volumes:mysql等带存储而且重启后存储不能删除的这种需要使用,宿主机目录挂载到容器中。
volumes:
- srcDir tagDir
environment:添加环境变量,同docker run –e
environment:
- key=value
- key=value
depends_on:指定容器间的依赖,控制容器的启动顺序。
extra_hosts:添加主机名映射,在容器/etc/hosts中添加内容
extra_hosts:
- “hostname:192.168.226.135”
extends: docker-compose之间的集成,子文件可以覆盖父文件中的具体参数
extends:
file:parent.yml
service:subName
其它参数:
Net设置网络,Dns设置域名解析,CPU等
DockerCompose启动命令:
启动: docker-compose up
停止: docker-compose stop
重启: docker-compose restart
实战:
新建一个空白目录/eureka,在其中新建一个docker-compose.yml文件,开始书写前面eureka的容器管理文件。
version: '2'
services:
eureka1:
image: eureka:v1
ports:
- '1111:1111'
environment:
- spring.profiles.active=peer1
eureka2:
image: eureka:v1
ports:
- '1112:1112'
environment:
- spring.profiles.active=peer2
在/eureka下执行启动命令:docker-compose up
然后chrome浏览器测试下,成功了。
注意docker-compose.yml第一个属性version不能乱定义,我开始理解错了以为是我自定义的,报了如下错误,后来搞明白是docker-compose的版本号。