1 compose是什么
前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
2 安装compose
1 下载
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
2 授权 docker-compose version 显示版本即安装成功!
sudo chmod +x /usr/local/bin/docker-compose
[root@iZuf65o9ovhniso4w0oji5Z bin]# docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
3 体验
参考官网
第一步:准备
- 创建文件夹
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
第二步:创建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"]
第三步:在docker compose文件中部署服务
- 编写docker-compose.yml文件
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
第四步:用build run运行应用
docker-compose up
Creating network "composetest_default" with the default driver
Building web
Sending build context to Docker daemon 5.632kB
Step 1/10 : FROM python:3.7-alpine
3.7-alpine: Pulling from library/python
540db60ca938: Pull complete
a7ad1a75a999: Pull complete
37ce6546d5dd: Pull complete
ec9e91bed5a2: Pull complete
ecb9463b81f8: Pull complete
Digest: sha256:65ef4c7141a5f6a5fb18aa8dfcbd19663028e161d74210fb6155f20a1342a0db
Status: Downloaded newer image for python:3.7-alpine
---> 078bbc5dc0e6
Step 2/10 : WORKDIR /code
---> Running in 45e02a299a96
Removing intermediate container 45e02a299a96
---> 52de9282f042
Step 3/10 : ENV FLASK_APP=app.py
---> Running in 6f644a990087
Removing intermediate container 6f644a990087
---> faff000f33b2
Step 4/10 : ENV FLASK_RUN_HOST=0.0.0.0
---> Running in d8a125a4ffcb
Removing intermediate container d8a125a4ffcb
---> be0cd543b6a9
Step 5/10 : RUN apk add --no-cache gcc musl-dev linux-headers
······
流程:
- 创建网络
在同一个网络下直接通过域名访问。 - 执行
- Creating composetest_web_1 … done
Creating composetest_redis_1 … done
命名规则:文件名_服务名_num
第五步:停止 docker-compose stop
总结:
以前都是单个docker run启动容器。
docker-compose 通过编写yaml配置文件、可以通过compose一键启动所有服务,停止!