Quantcast
Channel: polygun2000的博客
Viewing all articles
Browse latest Browse all 55

docker-compse读书笔记

$
0
0
1. docker-compose是什么,应用场景是什么

compose是用于定义和运行多个container的工具,可以参考类比vagrant。
我们可以通过一个YAML文件定义和配置多个容器,然后通过docker-compose一条命令,将这些容器运行起来。

典型的compose用法如下:
1. 通过定义Dockerfile,配置我们的应用,例如:nginx,db,redis等等
2. 通过docker-compose.yml中定义services,将上边定义的container组织在一起
3. 运行docker-compose up命令,启动所有应用的container,得到一个完整的可用环境

一个典型的docker-compose.yml看起来会像下边的例子的样子:

version: '3'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

实际中,我觉得compose最适合给开发人员配环境用。
一是运维配置好以后,开发只要一条命令即可得到完整的开发环境,简洁高效。
二是再也不会有“代码在我这跑的好好的呀,一定是你的环境哪有问题”这种话。

2. docker-compose的安装
官方有可执行文件直接下载,不过我更推荐使用pip来安装,更方便之后的升级管理。
]# pip install docker-compose

安装compose的命令自动补齐
]# curl -L https://raw.githubusercontent.com/docker/compose/1.21.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
]# source ~./bash_profile

4. 多个compose-file的用法
compose支持使用“-f”指定多个compose配置文件,形式如下:

]# docker-compose -f docker-compose.yml -f docker-compose.admin.yml run backup_db

docker-compose命令至少需要指定docker-compose.yml。
如果不指定“-f”参数,compose会在当前工作目录,及工作目录的上级目录中自动寻找名为docker-compose.override.yml的文件。

多个”-f“指定的compose-file,会合被并成一个文件,合并的原则是“Adding and overriding”。
“-f”指定的文件路径,必须是相对于docker-compose.yml的位置。
所谓”Adding and overriding“,是指按命令行输入”-f“的顺序,后边的文件覆盖前边文件的配置。

例1:覆盖的例子
# docker-compose.yml中的配置
command: python app.py

# “-f” 指定的docker-compose.override.yml中的配置
command: python otherapp.py

# 合并后的结果,后边覆盖前边
command: python otherapp.py


例2:追加的例子
对于具有多个值的选项如 ports, expose, external_links, dns, dns_search, tmpfs, compose会将两个文件中的值连接为一体:

# docker-compose.yml中的配置
expose:
  - "3000"

# “-f” 指定的docker-compose.override.yml中的配置
expose:
  - "4000"
  - "5000"

# 合并后的结果,两者追加合并在一起
expose:
  - "3000"
  - "4000"
  - "5000"

例3: 追加和合并的例子
对于 environment, labels, volumes, devices这些选项,compose在追加合并的时候,后边的override文件定义的值具有优先权。

# docker-compose.yml中的配置
environment:
  - FOO=original
  - BAR=original

# “-f” 指定的docker-compose.override.yml中的配置
environment:
  - BAR=local
  - BAZ=local

# 合并后的结果,两者追加合并在一起,BAR=local具有优先权
environment:
  - FOO=original
  - BAR=local
  - BAZ=local

例4:volumes和 devices 选项使用在container中的mount路径合并

# docker-compose.yml中的配置
volumes:
  - ./original:/foo
  - ./original:/bar

# “-f” 指定的docker-compose.override.yml中的配置
volumes:
  - ./local:/bar
  - ./local:/baz

# 合并后的结果,两者追加合并在一起
volumes:
  - ./original:/foo
  - ./local:/bar
  - ./local:/baz

通过使用多个docker-compose文件,我们可以在生产,测试,UAT间进行切换,可以参考docker官网的例子。

5.docker-compose中的网络配置

默认情况下,compose file中的所有container会加入compose创建的同一个网络,并且可已通过主机名进行服务发现。

举例来说:docker-compose.yml配置如下:

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

当我们运行 docker-compose up 以后:

一个名为myapp_default的网络被创建
一个使用web配置的container被创建,其使用web作为名字,加入myapp_default网络
一个使用db配置的container被创建,其使用db作为名字,加入myapp_default网络

现在每个container都可以通过查询主机名 web 或者 db 来获取对应container的IP地址。

 

Viewing all articles
Browse latest Browse all 55

Trending Articles