Docker 容器编排利器Compose(起步篇)

2020-06-17 06:20:09易采站长站整理

redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! I have been seen {} times.n'.format(count)

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

在项目文件夹下创建一个

requirements.txt
的文件,并将下面的代码拷贝并粘贴到该文件中:


flask
redis

到此,我们已经完成了新建项目,编码,添加依赖等工作。

创建Dockerfile

下面我们创建一个

Dockerfile
文件用于构建Docker镜像,该镜像包含了运行该Web应用的所有依赖,包括Python运行环境。

在项目文件夹下创建一个

Dockerfile
文件,并将下面的内容拷贝并粘贴到该文件中:


FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

大概解释一下这个配置文件:

使用python-3.4-alpine作为基础镜像
将当前目录添加到镜像中/code目录下
将/code设置为工作目录
安装Python依赖
设置默认执行命令

在Compose文件中定义services

在项目文件夹下创建一个

docker-compose.yml
文件,并将下面的内容拷贝并粘贴到该文件中:


version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"

该配置文件中包含两个services,即web和redis。web会使用当前目录中的Dockerfile文件构建镜像,并将容器的5000端口暴露给主机,然后将项目文件夹挂载到容器中的/code目录下;redis使用官方发布的镜像构建。

构建并运行

执行下面的命令构建并运行容器:


sudo docker-compose up

容器构建完成并启动后,可以在浏览器中输入http://localhost:5000查看结果。页面会打印“Hello World! I have been seen 1 times.”,刷新页面后,计数会累加变成2。

更新应用

由于项目文件夹挂载到了容器中,所以我们可以直接修改项目文件夹的应用,修改的结果立即反应到容器中,而不用重新启动容器。将app.py文件中的hello方法中的返回值修改成如下:

return ‘Hello from Docker! I have been seen {} times.n’.format(count)

保存后刷新浏览器,发现打印结果已经更新。

Compose的其他命令