Docker Compose 概述
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序需要的服务。然后,使用单个命令就可以从YML配置中创建并启动所有服务。使用Docker Compose可以方便、高效的管理容器。
官方文档:https://docs.docker.com/compose/
使用 Compose 的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用docker-compose.yml定义应用程序的服务,这样就可以在隔离的环境中一起运行。
- 运行
docker-compose up
命令启动并运行整个应用程序。
安装Docker Compose
Linux环境下安装Compose。
- 安装Compose:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 对二进制文件应用可执行权限:
$ sudo chmod +x /usr/local/bin/docker-compose
- 测试安装是否成功:
$ docker-compose --version
docker-compose version 1.29.2, build 1110ad01
Docker Compose入门案例
体验官方示例:https://docs.docker.com/compose/gettingstarted/
第一步:设置
- 为项目创建一个目录
mkdir composetest
cd composetest
- 新建
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)
.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
- 将依赖添加到
requirements.txt
中
flask
redis
第二步:创建 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
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
第三步:在 Compose 文件中定义服务
新建 docker-compose.yml
文件并粘贴以下内容
version"3"
services
web
build.
ports
"5000:5000"
redis
image"redis:alpine"
第四步:使用 Compose 构建并运行您的应用程序
$ docker-compose up
-d
参数:后台执行该服务
在浏览器中输入 http://localhost:5000/ 以查看应用程序正在运行。
Docker Compose常用命令
停止 Compose:
docker-compose stop
关闭 Compose:
docker-compose down
删除已停止的 Compose 应用:
docker-compose rm
重启已停止的 Compose 应用:
docker-compose restart
常用配置
Docker Compose File 的顶级配置项:
- version:指定Compose版本
- services:定义多个服务并配置启动参数
- volumes:声明或创建在多个服务中共同使用的数据卷对象
- networks:定义在多个服务中共同使用的网络
- configs:声明将在本服务中要使用的一些配置文件
- secrets:声明将在本服务中要使用的一些密钥、密码文件
- x-***:自定义配置,主要用来复用相同的配置
更多详细配置可以参考官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/