一、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版本为例,安装操作命令如下:
# curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
三、项目测试
这里以一个最简单的 flask 应用为例,测试项目的目录结构如下:
[root@localhost ~]# tree /composetest/
/composetest/
├── app.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
app.py文件的内容如下:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
requirements.txt 文件的内容如下:
flask
redis
这里列出的是flask应用依赖的包。
创建的Dockerfile文件内容如下:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
创建docker-compose.yml文件内容如下:
# yaml 配置
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
通过docker-compose up -d 启用应用即可。这时打开URL访问http://IP:5000 就可以查示Hello World! I have been seen 1 times 的内容,每刷新一次页面,对应的次数也会相应的更新。
四、compose指令
常见的compose指令可以通过–help查看,具体内容如下:
docker-compose up -d : 后台运行
docker-compose stop: 停止正在运行的服务
docker-compose down: 关闭所有容器并删除,默认保留 数据卷
docker-compose ps:列出当前运行的服务状态和相关信息
docker-compose run: 一次性命令
这里特别提示下docker-compose build命令(或docker-compose up -d –build),如果运行的app.py内容有更新,可以在启动时,带上build重新生成新的内容,更改会立即生效。
docker-compose run 指信可以查看服务器的指令,这个需要通过docker run 指令也可以正常通过shell 执行才可以,像上面的alpine这种压缩过后的image不一定有输出,例如要输出环境变量信息,可以使用如下指令:
$ docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e4b6b17f39dc
TERM=xterm
LANG=C.UTF-8
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
PYTHON_VERSION=3.7.4
PYTHON_PIP_VERSION=9.0.1
HOME=/root
好,本篇幅就先到这里吧,下一篇再对docker-compose的语法结构做一个总结。