Docker Compose 容器编排

时间:2021-01-23 15:25:38

1. 前言

Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。

使用Compose 基本上分为三步:

  1. Dockerfile 定义应用的运行环境
  2. docker-compose.yml 定义组成应用的各服务
  3. docker-compose up 启动整个应用

2. 安装Compose

Compose repository release page on GitHub 最新版的Docker Compose,例如:

curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装成功后,查看版本

$ docker-compose --version
docker-compose version 1.14.0, build 1719ceb

3. 使用Compose

3.1 创建一个Python应用, 使用Flask,将数值记入Redis

  1. 创建一个项目目录
# mkdir composetest
# cd composetest
  1. 在项目目录下,创建app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
  1. 在项目目录下,创建requirements.txt文件
flask
redis

3.2 创建 Dockerfile

在项目目录下,创建Dockerfile

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

对上面的Dockerfile做一下简单说明:

  • 容器使用Python 3.4的镜像
  • 将当前目录下文件拷贝到容器内/code
  • 指定工作目录为/code
  • 安装python需要的库:flask, redis
  • 容器执行命令 python app.py

3.3 创建Compose脚本

在项目目录下,创建docker-compose.yml文件

version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"

3.4 启动应用

会执行编排脚本,分别制作和抓取web,redis镜像,启动容器

 $ docker-compose up
Pulling image redis...
Building web...
Starting composetest_redis_1...
Starting composetest_web_1...
redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3
web_1 | * Running on http://0.0.0.0:5000/
web_1 | * Restarting with stat

3.5 访问应用

每刷新一下页面,次数加1

Docker Compose 容器编排

3.6 更新应用

  1. 修改app.py内容,然后保存,例如:
return 'Hello from Docker! I have been seen {} times.\n'.format(count)
  1. 刷新浏览器页面,发现页面内容改变,并且次数依然在递增

    Docker Compose 容器编排

4. 体验其他命令

  1. 使用daemon模式启动,并且查看容器状态
$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
composetest_redis_1 /usr/local/bin/run Up
composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
  1. 查看容器环境变量
$ docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=bdc78b829f9f
TERM=xterm
LANG=C.UTF-8
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
PYTHON_VERSION=3.4.6
PYTHON_PIP_VERSION=9.0.1
HOME=/root
  1. 停止Compose启动的容器
$ docker-compose stop
  1. 停止和删除所有容器
$ docker-compose down