简介
docker-compose的出现,解决了批量化docker环境的问题,只需要配置docker-compose.yml
文件,就可以搭建自己所需的环境。所以,我就根据docker官网的手册,使用docker-compose来搭建环境,首先搭建的是一个flask网站,使用的是redis。
搭建
Step 1:Setup
1.创建仓库,安装的镜像,服务都在创建的仓库里
$ mkdir composetest
$ cd composetest
2.创建app.py,我们的flask网站内容反映在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)
代码的意思是每次刷新网站,访问次数会在页面显示。官方文档中显示的注意事项,关于get_hit_count的细节,翻译过来是
注意get_hit_count函数的编写方式。如果Redis服务不可用,这个基本的重试循环允许我们多次尝试请求。
当应用程序联机时,这在启动时很有用,但如果在应用程序的生命周期内需要随时重新启动Redis服务,这也会使我们的应用程序更有弹性。
在集群中,这也有助于处理节点之间的瞬时连接丢失。
3.创建requirements.txt
文件,里面的内容是
flask
redis
这是flask必要的文件,里面是需求
Step 2:Create a Dockerfile
在你编写的dockerfile里面,包含了python应用程序需要的所有依赖项,包括python本身,在本项目里,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
COPY . .
CMD ["flask", "run"]
功能如下:
从python 3.7映像开始构建映像。
将工作目录设置为/code。
设置flask命令使用的环境变量。
安装gcc,让诸如markupsafe和sqlacalchemy之类的python包可以编译加速。
复制requirements.txt并安装python依赖项。
复制当前目录。在项目中到WorkDir。在图像中。
将容器的默认命令设置为flask run。
更多的使用方法,可以参考官方文档
https://docs.docker.com/engine/reference/builder/
step 3:Create a docker-compose.yml
在这一步中,我们需要做的就是根据自己的需要,来写配置文件
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
可以发现,services里面有两个服务,一个是web,另一个是redis,web服务的作用是在容器里绑定端口5000,redis是从网上pull下来的。
这里是配置文件的参数信息
https://blog.csdn.net/Aria_Miazzy/article/details/89326829
step 4:Build and run
使用命令
docker-compose up
让我们的容器运转起来,在执行过程中可能会出现报错
ERROR: Service 'web' failed to build: The command '/bin/sh -c apt-get update --fix-missing' returned a non-zero code: 127
这是源的问题,就需要我们换一下源,换源可以参考文章
http://dvsx.cn/2019/07/11/ubuntu-huan-yuan/
问题解决之后,就可与在网站上访问了
更新参数
想要更改参数,需要先关闭环境
docker-compose down
我们想要修改的是增加一个环境变量,允许动态的修改代码,而不必重启镜像。flask_env环境变量,指示flask run以开发者模式运行。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
然后再开启环境就可以了
docker-compose up
总结
在环境的搭建过程中,daockerfile和docker-compose.yml的编写是很重要的步骤,要理解各个参数的意思,才能根据自己的需求搭建出自己想要的环境。