您的位置:首页 > 运维架构 > Docker

Docker - 使用 compose 编排服务

2017-03-24 00:45 726 查看

入门示例

一般步骤

1、定义Dockerfile,方便迁移到任何地方;
2、编写docker-compose.yml文件;
3、运行
docker-compose up
启动服务

示例

准备工作:提前下载好镜像:

docker pull mysql
docker pull wordpress
[/code]
需要新建一个空白目录,例如wptest。新建一个docker-compose.yml

 

 
[/code]
以上命令的意思是新建db和wordpress容器。等同于:

$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
$ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress
[/code]

注意,如果你是直接从fig迁移过来的,且
web
links
- db:mysql
,这里会提示没有给wordpress设置环境变量,这里需要添加环境变量
WORDPRESS_DB_HOST
WORDPRESS_DB_PASSWORD


好,我们启动应用:

 

 

 

 

就成功了。浏览器访问 http://localhost:8002(或 http://host-ip:8002)即可。

默认是前台运行并打印日志到控制台。如果想后台运行,可以:

docker-compose up -d
[/code]
服务后台后,可以使用下列命令查看状态:

 

停止服务:

 

 

 

 

重新启动服务:

docker-compose restart
[/code]

docker-compose.yml参考

每个docker-compose.yml必须定义
image
或者
build
中的一个,其它的是可选的。

image

指定镜像tag或者ID。示例:

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
[/code]

注意,在
version 1
里同时使用
image
build
是不允许的,
version 2
则可以,如果同时指定了两者,会将
build
出来的镜像打上名为
image
标签。

build

用来指定一个包含
Dockerfile
文件的路径。一般是当前目录
.
。Fig将build并生成一个随机命名的镜像。

注意,在
version 1
bulid
仅支持值为字符串。
version 2
里支持对象格式。

build: ./dir

build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
[/code]
context
为路径,
dockerfile
为需要替换默认
docker-compose
的文件名,
args
为构建(build)过程中的环境变量,用于替换Dockerfile里定义的
ARG
参数,容器中不可用。示例:

Dockerfile:

ARG buildno
ARG password

RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"
[/code]
docker-compose.yml:

build:
context: .
args:
buildno: 1
password: secret

build:
context: .
args:
- buildno=1
- password=secret
[/code]

command

用来覆盖缺省命令。示例:

command: bundle exec thin -p 3000
[/code]
command
也支持数组形式:

command: [bundle, exec, thin, -p, 3000]
[/code]

links

用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同
docker run --link
。示例:

links:
- db
- db:mysql
- redis
[/code]
使用了别名将自动会在容器的
/etc/hosts
文件里创建相应记录:

172.17.2.186  db
172.17.2.186  mysql
172.17.2.187  redis
[/code]
所以我们在容器里就可以直接使用别名作为服务的主机名。

 

ports

用于暴露端口。同
docker run -p
。示例:

ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
[/code]

expose

expose提供container之间的端口访问,不会暴露给主机使用。同
docker run --expose


expose:
- "3000"
- "8000"
[/code]

volumes

挂载数据卷。同
docker run -v
。示例:

volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
[/code]

volumes_from

挂载数据卷容器,挂载是容器。同
docker run --volumes-from
。示例:

volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
[/code]

container:container_name
格式仅支持
version 2


 

environment

添加环境变量。同
docker run -e
。可以是数组或者字典格式:

environment:
RACK_ENV: development
SESSION_SECRET:

environment:
- RACK_ENV=development
- SESSION_SECRET
[/code]

 

depends_on

用于指定服务依赖,一般是mysql、redis等。
指定了依赖,将会优先于服务创建并启动依赖。

links
也可以指定依赖。

 

external_links

链接搭配
docker-compose.yml
文件或者
Compose
之外定义的服务,通常是提供共享或公共服务。格式与
links
相似:

external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
[/code]

注意,
external_links
链接的服务与当前服务必须是同一个网络环境。

 

extra_hosts

添加主机名映射。

extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
[/code]
将会在
/etc/hosts
创建记录:

162.242.195.82  somehost
50.31.209.229   otherhost
[/code]

 

extends

继承自当前yml文件或者其它文件中定义的服务,可以选择性的覆盖原有配置。

extends:
file: common.yml
service: webapp
[/code]
service
必须有,
file
可选。
service
是需要继承的服务,例如
web
database


 

net

设置网络模式。同docker的
--net
参数。

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
[/code]

 

dns

自定义dns服务器。

dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
[/code]

 

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

这些命令都是单个值,含义请参考docker run

cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1

user: postgresql
working_dir: /code

domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43

mem_limit: 1000000000
mem_limit: 128M
memswap_limit: 2000000000
privileged: true

restart: always

read_only: true
shm_size: 64M
stdin_open: true
tty: true
[/code]

 

命令行参考

 

 

 

 

批处理脚本

# 关闭所有正在运行容器
docker ps | awk  '{print $1}' | xargs docker stop

# 删除所有容器应用
docker ps -a | awk  '{print $1}' | xargs docker rm
# 或者
docker rm $(docker ps -a -q)
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker