Docker Compose
2. Docker Compose
https://docs.docker.com/compose/
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。
将多个docker容器组成一个启动
1.安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.0/dockercompose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
# or
# ubuntu
sudo apt install docker-compose
2. Yaml语法
Yaml语法教程
name: wangweibin
url: http://www.baidu.com
page: 88
address:
street: 宏福科技园
city: 北京市昌平区
country: 中国
links:
- name: Google
url: http://www.google.com
- name: Baidu
url: http://www.baidu.com
{
"name": "wangweibin",
"url": "http://www.baidu.com",
"page": 88,
"address": {
"street": "宏福科技园",
"city": "北京市昌平区",
"country": "中国"
},
"links": [
{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
}
]
}
3.一个小Demo
3.1 定义依赖
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)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
创建一个requirements.txt
文件
flask
redis
3.2 创建Dockerfile
Dockerfile 用于构建 Docker 映像。该映像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。
# syntax=docker/dockerfile:1
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"]
这告诉 Docker:
- 从 Python 3.7 映像开始构建映像。
- 将工作目录设置为
/code
. - 设置命令使用的环境变量
flask
。 - 安装 gcc 和其他依赖
- 复制
requirements.txt
并安装 Python 依赖项。 - 在镜像中添加元数据来描述容器正在监听 5000 端口
- 将项目中的当前目录复制
.
到镜像中的workdir.
。 - 将容器的默认命令设置为
flask run
.
3.3 编写compose.yml
version: "3.9" # 指定版本号 查看官方文档:https://docs.docker.com/compose/compose-file/compose-versioning/
services: # 所有需要启动的服务
web: # 第一个服务名称
build: . # docker build -t xx -f Dokcerfile .
ports: # 指定暴漏的端口
- "8000:5000"
redis: # 第二个服务名称
image: "redis:alpine"
# 可以编写第三个服务名称
启动
docker-compose up -d -d分离运行
使用pip安装有可能遇到time out的情况,使用替换当前Dockerfile种的命令
pip --default-timeout=100 install 模块名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip --default-timeout=100 install -r requestments.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 切换为其他国内镜像地址(替换命令中的网址即可):
停止
docker-compose stop 关闭compose
docker-compose down 删除compose