引子
Docker-Compose 属于Docker的一个工具
Docker-compose 安装
安装它的前提是要安装pip工具.
首先检查Linux有没有安装Python-pip包
直接执行
1 | yum install -y python-pip |
没有python-pip包就执行命令1
yum install -y epel-release
执行成功之后,再次执行1
yum install -y python-pip
对安装好的pip进行升级
1 | pip install --upgrade pip |
使用镜像1
pip install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
最后安装
1 | pip install docker-compose |
使用镜像1
pip install docker-compose -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
Docker-compose 学习
一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。完整的命令列表如下:
1 | build 构建或重建服务 |
参考 。你能运行Compose在OSX和64位Linux。当前不支持Windows操作系统。
配置文件 docker-compose.yml
Compose 文件是一个 YAML , 主要定义了 services , networks 和 volumes , 其默认路径是 ./docker-compose.yml 。
service 定义包含了应用与每个容器的配置,很像给 docker run 传参,同样, network 和 volume 对于 docker network create 和 docker volume create 也类似。
像在 Dockerfile (eg: CMD , EXPOSE , VOLUME , ENV )可以使用的选项也可以在 docker run 参数中使用, 这样在 docker-compose.yml 里就不需要再次指定了。
docker-compose.yml 里可以使用环境变量,类似 Bash 格式 ${VARIABLE}
参考
1 | version: '2' |
Composer Version
composer 文件格式有两种版本:
- version 1: 已经废弃,
- version 2: 推荐的格式,目前是最新的,需要通过 version ‘2’ 指定。
Service配置
1 | services: |
build
指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。1
build: /path/to/build/dir
command
覆盖容器启动后默认执行的命令。1
command: bundle exec thin -p 3000
links
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS) 格式都可以。1
2
3
4links:
- db
- db:database
- redis
使用的别名将会自动在服务容器中的 /etc/hosts 里创建。例如:
172.17.2.186 db
相应的环境变量也将被创建。
external_links
链接到 docker-compose.yml 外部的容器,甚至 并非 Compose 管理的容器。参数格式跟 links 类似。
1 | external_links: |
ports
1 | - "3000" |
注:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。
expose
暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数1
2
3expose:
- "3000"
- "8000"
volumes
卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
1 | volumes: |
volumes
从另一个服务或容器挂载它的所有卷。1
2
3volumes_from:
- service_name
- container_name
environment
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。
1 | environment: |
env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 指定了模板文件,则 env_file 中路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则以后者为准。
1 | env_file: .env |
环境变量文件中每一行必须符合格式,支持 # 开头的注释行。
1 | # common.env: Set Rails/Rack environment |
extends
基于已有的服务进行扩展。例如我们已经有了一个 webapp 服务,模板文件为 common.yml。
1 | # common.yml |
编写一个新的 development.yml 文件,使用 common.yml 中的 webapp 服务进行扩展。
development.yml
1 | web: |
后者会自动继承 common.yml 中的 webapp 服务及相关环节变量。
net
设置网络模式。使用和 docker client 的 —net 参数一样的值。
1 | net: "bridge" |
pid
跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。1
pid: "host"
dns
配置 DNS 服务器。可以是一个值,也可以是一个列表。
1 | dns: 8.8.8.8 |
cap_add, cap_drop
添加或放弃容器的 Linux 能力(Capabiliity)。1
2
3
4
5cap_add:
- ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
dns_search
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
1 | dns_search: example.com |
更多
working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares
这些都是和 docker run 支持的选项类似。
1 | cpu_shares: 73 |