1.为什么出现docker-compose
在docker-compose之前,如果一个web服务需要依赖多个服务,例如mysql,redis等等,那么会启动mysql和redis容器,如果依赖100个服务呢?这里说的有点夸张了,那得手动启动,也就是docker run 100个服务,docker-compose就是用来解决这个问题的。
看下官网的介绍
简而言之docker-compose就是运行多个容器的一个应用程序,下面看个例子
安装过程详细可以查看,第二种方式
http://116.62.19.167/index.php/2021/06/02/%e7%ae%80%e5%8d%95%e7%9a%84%e6%9e%84%e5%bb%ba%e4%b8%80%e4%b8%aa%e4%b8%aa%e4%ba%ba%e5%8d%9a%e5%ae%a2/
4.docker-compose 官方例子
1.创建文件夹
mkdir composetest
cd composetest
2.编写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)
##### 这里加个启动程序
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True)
3.编写requirements.txt文件
flask
redis
4.编写Dockerfile文件
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ADD . /code
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
5.编写docker-compose.yml文件
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
测试 :
分析这个过程干了啥
1.生成了镜像
2、构建了两个服务,根据docker-compose.yml中的配置
3、构建了网络,创建了composetest_default 的网络
运行docker network inspect composetest_default可以看到,两个容器被加到这个网络下,以前要把容器加入到网络,就得需要docker run --net 网络名 --name 容器名 镜像id,默认创建了一个网络
4.停止
docker-compose down
官方的例子做了点修改,需要注意下,app.py最后和Dockerfile 文件都做了修改,可以直观的看到docker-compose可以一键启动多个服务,也就是根据docker-compose创建多个镜像文件,然后根据镜像创建多个容器,并创建一个默认的网络并把容器加入到网络下。
文章评论