Dokcer14_3:Docker Compose使用
- 1.为项目创建一个存放目录
- 2.构建一个应用,app.py
- 3.构建Dockerfile(之前Dockerfile打包镜像,再run的就是单机玩一下)
- 创建docker-compose.yml(定义整个服务,需要的环境。web、redis):完整的项目上线服务
- 通过命令docker-compose up来启动
- 停止compose
- compose作用
Docker Compose使用教程官方网址:https://docs.docker.com/compose/gettingstarted/
1.为项目创建一个存放目录
mkdir composetest
cd composetest
2.构建一个应用,app.py
新建app.py文件。app.py代表python的一个应用程序,直接粘贴下面代码即可,是一个访问计数的简易功能。
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)
在项目目录中创建另一个名为requments.txt的文件
flask
redis
3.构建Dockerfile(之前Dockerfile打包镜像,再run的就是单机玩一下)
FROM python:3.7-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requments.txt
CMD ["python", "app.py"]
命令解析:
- 从Python3.7映像开始构建一个映像。
- 将当前目录.添加到/code镜像中的路径。
- 设置环境变量。
- 安装GCC和其他依赖项
- 复制requments.txt,并安装Python依赖项。
- pip方式去运行,暴露端口5000。
- 复制当前目录到镜像工作目录。
- 将容器的默认命令设置为 flask run。
创建docker-compose.yml(定义整个服务,需要的环境。web、redis):完整的项目上线服务
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
这个docker-compose yaml文件定义了两个服务:web和redis。
通过命令docker-compose up来启动
流程:
- 创建网络
- 执行docker-compose yaml文件
- 启动服务
docker-compose yaml
Creating test_redis_1 … done(这里输出的是服务名字)
Creating test_web_1 … done
默认的服务名称规则:文件目录_服务名_num
数字就是用来区分集群部署的,因为服务不可能只有一个实例,都是进群部署的,这样才能保证高可用性(HA),一台宕机不影响程序正常运行。
可以看到多了一个网络,test_default,这个就是docker-compose.yml中定义的服务,会自动分配到同一网络来保证网络的连通。
这样,同一网络下,可以直接通过域名来访问,比如redis:6379,不需要你关心重新拉取之后ip变掉,因为你使用域名访问的。
停止compose
docker-compose down或者ctrl + c。
compose作用
以前都是单个docker run启动容器
docker-compose通过编写docker-compose.yml配置文件,可以通过docker-compose up来一键启动、停止所有服务。