Docker-Compose简介
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。Compose可在所有环境中工作:生产、模拟、开发、测试以及CI工作流。
使用Compose基本上是三步流程:
- 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制它。
- 在docker-compose.yml中定义组成您的应用程序的服务,以便它们可以在隔离的环境中一起运行。
- 运行docker-compose up,然后Compose启动并运行整个应用程序。
Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。
更多内容参考Overview of Docker Compose。
安装Compose
在CentOS7机器上,假设已经了Docker,参考Install Docker Compose安装Compose-Docker。如果没有安装Docker,那么参考Docker入门进行安装。
1、安装docker-compose
1
| sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
2、添加执行权限
1 2
| sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
|
3、验证安装
docker-compose --version
Hello World
1、创建测试目录
1 2
| mkdir composetest cd composetest
|
2、在项目目录中创建一个名为app.py的文件,内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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)
|
在此示例中,redis是应用程序网络上的redis容器的主机名,使用默认端口6379。
3、创建requirements.txt文件,内容为:
4、创建Dockerfile,内容为:
1 2 3 4 5 6 7 8 9
| 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"]
|
该文件说明:
- 从Python 3.7映像开始构建映像。
- 将工作目录设置为/code。
- 设置flask命令使用的环境变量。
- 安装gcc,以便诸如MarkupSafe和SQLAlchemy之类的Python包可以编译加速。
- 复制requirements.txt并安装Python依赖项。
- 复制当前目录中的所有文件到工作目录。
- 将容器的默认命令设置为flask run。
有关如何编写Dockerfile的更多信息,参考Docker用户指南和Dockerfile参考。
5、创建docker-compose.yml,内容为:
1 2 3 4 5 6 7 8
| version: '3' services: web: build: . ports: - "15000:5000" redis: image: "redis:alpine"
|
该Compose文件定义了两个服务:Web和Redis。
Web服务从Dockerfile构建镜像,启动后容器在5000端口提供服务,然后将容器端口5000绑定到主机端口15000。
6、使用Compose构建和运行应用
docker-compose up
7、测试应用
curl http://127.0.0.1:15000
Hello World 2.0
1、编辑docker-compose.yml,挂载当前目录到/code
1 2 3 4 5 6 7 8 9 10 11 12
| version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code environment: FLASK_ENV: development redis: image: "redis:alpine"
|
2、运行应用
docker-compose up
3、修改app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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 2.0! I have been seen {} times.\n'.format(count)
|
4、测试应用
curl http://127.0.0.1:15000
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 构建和运行应用 docker-compose up
# 构建和后台运行应用 docker-compose up -d
# 关闭应用 docker-compose down
# 关闭应用,并删除Redis容器内数据 docker-compose down --volumes
# 查看容器 docker-compose ps
# 查看web服务的环境变量 docker-compose run web env
|
书签
Overview of Docker Compose
Docker 入门教程
docker/compose