一、Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。compose对于单机或者少量机器的docker管理比较友好,批量node节点的管理还是通过k8s管理比较好。Compose配置应用的步骤一般如下:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

二、Compose安装

最简单的安装方法是配置epel源后,通过yum命令进行安装。这样也可以避免一堆环境依赖,当然除此之外,也可以从github上下载二进制包进行使用。其地址为:

这里以1.27.3版本为例,安装操作命令如下:

1# curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2# chmod +x /usr/local/bin/docker-compose
3# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

三、项目测试

这里以一个最简单的 flask 应用为例,测试项目的目录结构如下:

1[root@localhost ~]# tree /composetest/
2/composetest/
3├── app.py
4├── docker-compose.yml
5├── Dockerfile
6└── requirements.txt

app.py文件的内容如下:

 1import time
 2import redis
 3from flask import Flask
 4app = Flask(__name__)
 5cache = redis.Redis(host='redis', port=6379)
 6def get_hit_count():
 7    retries = 5
 8    while True:
 9        try:
10            return cache.incr('hits')
11        except redis.exceptions.ConnectionError as exc:
12            if retries == 0:
13                raise exc
14            retries -= 1
15            time.sleep(0.5)
16@app.route('/')
17def hello():
18    count = get_hit_count()
19    return 'Hello World! I have been seen {} times.\n'.format(count)

requirements.txt 文件的内容如下:

1flask
2redis

这里列出的是flask应用依赖的包。

创建的Dockerfile文件内容如下:

1FROM python:3.7-alpine
2WORKDIR /code
3ENV FLASK_APP app.py
4ENV FLASK_RUN_HOST 0.0.0.0
5RUN apk add --no-cache gcc musl-dev linux-headers
6COPY requirements.txt requirements.txt
7RUN pip install -r requirements.txt
8COPY . .
9CMD ["flask", "run"]

创建docker-compose.yml文件内容如下:

1# yaml 配置
2version: '3'
3services:
4  web:
5    build: .
6    ports:
7     - "5000:5000"
8  redis:
9    image: "redis:alpine"

通过docker-compose up -d 启用应用即可。这时打开URL访问http://IP:5000 就可以查示Hello World! I have been seen 1 times 的内容,每刷新一次页面,对应的次数也会相应的更新。

四、compose指令

常见的compose指令可以通过–help查看,具体内容如下:

1docker-compose up -d : 后台运行
2docker-compose stop: 停止正在运行的服务
3docker-compose down: 关闭所有容器并删除,默认保留 数据卷
4docker-compose ps:列出当前运行的服务状态和相关信息
5docker-compose run: 一次性命令

这里特别提示下docker-compose build命令(或docker-compose up -d –build),如果运行的app.py内容有更新,可以在启动时,带上build重新生成新的内容,更改会立即生效。

docker-compose run 指信可以查看服务器的指令,这个需要通过docker run 指令也可以正常通过shell 执行才可以,像上面的alpine这种压缩过后的image不一定有输出,例如要输出环境变量信息,可以使用如下指令:

1$ docker-compose run web env
2PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
3HOSTNAME=e4b6b17f39dc
4TERM=xterm
5LANG=C.UTF-8
6GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
7PYTHON_VERSION=3.7.4
8PYTHON_PIP_VERSION=9.0.1
9HOME=/root

好,本篇幅就先到这里吧,下一篇再对docker-compose的语法结构做一个总结。