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 | 第七章:Docker Compose服务编排介绍及使用
- (转)Docker - 使用 compose 编排服务
- Docker之Compose服务编排
- 使用docker-compose 大杀器来部署服务 上
- 使用docker-compose 大杀器来部署服务 上
- 使用docker compose部署服务【转】
- Docker之Compose服务编排
- 使用docker compose部署服务
- Docker之Compose服务编排
- 详解Docker之Compose服务编排
- Docker Compose 编排容器(单台服务器,安装多个docker服务)
- Docker-Compose服务编排
- Docker - 使用Swarm和compose部署服务(containers)
- Docker(三)-服务编排-DockerCompose
- Docker之Compose服务编排
- Docker应用编排:Compose入门(待续)
- 不能再docker容器中使用宿主机的docker服务的解决方案
- 【转】使用Spring Cloud和Docker构建微服务
- docker-compose简单使用