Docker(四)----Docker-Compose详解
1. 什么是Docker-Compose
Compose项⽬来源于之前的fig项⽬,使⽤python语⾔编写,与docker/swarm配合度很⾼。
Compose 是 Docker 容器进⾏编排的⼯具,定义和运⾏多容器的应⽤,可以⼀条命令启动多个容器,使⽤Docker Compose不再需要使⽤shell脚本来启动容器。
Compose 通过⼀个配置⽂件来管理多个Docker容器,在配置⽂件中,所有的容器通过services来定义,然后使⽤docker-compose脚本来启动,停⽌和重启应⽤,和应⽤中的服务以及所有依赖服务的容器,⾮常适合组合使⽤多个容器进⾏开发的场景。
docker-compose默认的模板⽂件是 l,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要Dockerfile)来⾃动构建。
其它⼤部分指令都跟 docker run 中的类似。
如果使⽤ build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会⾃动被获取,⽆需在 l 中再次设置。
使⽤Compose 基本上分为三步:
1.Dockerfile 定义应⽤的运⾏环境
l 定义组成应⽤的各服务
3.docker-compose up 启动整个应⽤
2.安装C om p os e
两种docker-compose安装⽅式
1.从github上下载docker-compose⼆进制⽂件安装
下载最新版的docker-compose⽂件
$ sudo curl -L github/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
添加可执⾏权限
$ sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
$ docker-compose --version
docker-compose version 1.16.1, build 1719ceb
2.pip安装
2.1、安装python-pip
yum -y install epel-release
yum -y install python-pip
2.2、安装docker-compose
pip install docker-compose
待安装完成后,执⾏查询版本的命令,即可安装docker-compose
[root@swarm01 fendo]# docker-compose version
docker-compose version 1.21.2, build a133471
docker-py version: 3.3.0
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017
l 配置⽂件详解
docker-compose⽂件结构,官⽅提供了⼀个 yaml Docker Compose 配置⽂件的标准例⼦
version: "3"
services:
redis:
image: redis:alpine
ports:
-
"6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [le == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
-
5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [le == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [le == manager]
networks:
frontend:
backend:
volumes:
db-data:
⼀份标准配置⽂件应该包含 version、services、networks 三⼤部分,其中最关键的就是 services 和 networks 两个部分
3.1、⽂件配置
compose ⽂件是⼀个定义服务、 ⽹络和卷的 YAML ⽂件 。Compose ⽂件的默认路径是 ./l
服务定义包含应⽤于为该服务启动的每个容器的配置,就像传递命令⾏参数⼀样 docker container create。同样,⽹络和卷的定义类似于docker network create 和 docker volume create。
正如 docker container create 在 Dockerfile 指定选项,如 CMD、 EXPOSE、VOLUME、ENV,在默认情况下,你不需要再次指定它们l。
可以使⽤ Bash 类 ${VARIABLE} 语法在配置值中使⽤环境变量。
提⽰: 可以是⽤ .yml 或 .yaml 作为⽂件扩展名
3.2、版本
Compose⽬前为⽌有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose
1.6.0+,Docker Engine 1.10.0+)。Version 2⽀持更多的指令。Version 1没有声明版本默认是"version 1"。Version 1将来会被弃⽤。
3.3、配置选项
1.bulid
服务除了可以基于指定的镜像,还可以基于⼀份 Dockerfile,在使⽤ up 启动之时执⾏构建任务,这个构建标签就是 build,它可以指定Dockerfile 所在⽂件夹的路径。Compose 将会利⽤它⾃动构建这个镜像,然后使⽤这个镜像启动服务容器
build: /path/to/build/dir
也可以是相对路径
build: ./dir
设定上下⽂根⽬录,然后以该⽬录为准指定 Dockerfile
build:
context: ../
dockerfile: path/of/Dockerfile
2. context
context 选项可以是 Dockerfile 的⽂件路径,也可以是到链接到 git 仓库的url,当提供的值是相对路径时,它被解析为相对于撰写⽂件的路径,此⽬录也是发送到 Docker 守护进程的 context
docker重启容器命令build:
context: ./dir
3. dockerfile
使⽤此 dockerfile ⽂件来构建,必须指定构建路径
build:
context: .
dockerfile: Dockerfile-alternate
4.image
services:
web:
image: nginx
在 services 标签下的第⼆级标签是 web,这个名字是⽤户⾃⼰⾃定义,它就是服务名称。
image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
例如下⾯这些格式都是可以的:
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: a4bc65fd
5. args
添加构建参数,这些参数是仅在构建过程中可访问的环境变量
⾸先, 在Dockerfile中指定参数:
ARG fendo
ARG password
RUN echo "Build number: $fendo"
RUN script-requiring-password.sh "$password"
然后指定 build 下的参数,可以传递映射或列表
build:
context: .
args:
fendo: 1
password: fendo
build:
context: .
args:
- fendo=1
- password=fendo
指定构建参数时可以省略该值,在这种情况下,构建时的值默认构成运⾏环境中的值
args:
- fendo
- password
6mand
使⽤ command 可以覆盖容器启动后默认执⾏的命令。
command: bundle exec thin -p 3000
该命令也可以是⼀个列表,⽅法类似于 dockerfile:
command: ["bundle", "exec", "thin", "-p", "3000"]
Compose 的容器名称格式是:<;项⽬名称><;服务名称><;序号>
虽然可以⾃定义项⽬名称、服务名称,但是如果你想完全控制容器的命名,可以使⽤这个标签指定:
container_name: app
这样容器的名字就指定为 app 了。
8.depends_on
在使⽤ Compose 时,最⼤的好处就是少打启动命令,但是⼀般项⽬容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题⽽启动失败。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。