利用docker-compose部署简单flask_web_demo
基于Ubuntu18.04、Docker19.03.2
项目目录结构
└── case1-flask-web
├── docker-compose.yaml
├── Dockerfile
└── flask-web-code
├── app.py
└── requirements.txt
docker-compose安装
app.py文件
1 import time
2
3 import redis
4 from flask import Flask
5
6
7 app = Flask(__name__)
8 # 此处host是docker-compose.yaml配置文件中 redis的服务的名称
9 cache = redis.Redis(host='redis', port=6379)
10
11
12 def get_hit_count():
13 """利用redis统计访问次数"""
14 retries = 5
15 # 由于当redis重启时,可能会有短暂的无法访问redis
16 # 循环的在作用默认重试5次
17 while True:
18 try:
19 # redis的incr方法, 如果hits值存在自动+1, 否则新增该键,值为1
20 return cache.incr('hits')
21 except redis.exceptions.ConnectionError as e:
22 if retries == 0:
23 raise e
24 retries -= 1
25 time.sleep(0.5)
26
27
28 @app.route('/')
29 def main():
30 count = get_hit_count()
31 return "欢迎访问! 网站已累计访问{}次\n".format(count)
32
33
34 if __name__ == '__main__':
35 app.run(host='0.0.0.0', debug=True)
requirements.txt
# 环境依赖包
redis
flask
Dockerfile文件
1 # flask web app v1.0
2 # 搭建一个基于flask的web项目,实现了简单的访问统计
3 # 第一步: 获取一个镜像: python3.6
4 FROM python:alpine3.6
5 # 第二部: 拷贝项目代码到镜像中 ADD(自动尝试解压缩,不建议)/COPY
6 COPY ./flask-web-code /code
7 # 第三部: 安装项目的依赖环境: 第三方模块 flaks reids
8 # 切换工作目录用WORKDIR,类似于cd命令
9 WORKDIR /code
10 RUN pip install -r requirements.txt
11 # 第四部: 配置项目的启动 CMD参数 python app.py
12 CMD ["python", "app.py"]
13
14
docker-compose.yaml文件
1 version: "3.6"
2 services:
3 flask-web:
build的.代表当前路径下的Dockerfile文件
4 build: .
5 ports:
6 - "5000:5000"
7 container_name: flask-web
8 networks:
9 - web
10 redis:
# 建议提前pull下来redis的docker镜像文件,此处采用的时官方redis镜像
11 image: redis
12 container_name: redis3
13 networks:
14 - web
15 volumes:
16 - redis-data:/data
17 networks:
18 web:
19 driver: bridge
# 配置手动挂载数据卷,实现docker-compose down 后,保持数据持久性
20 volumes:
21 redis-data:
22 driver: local
23# PS:注意缩进,每层的空格数要保持一直,特别注意冒号在参数设置时留出一个空格
启动终端命令:sudo docker-compose up
终端或浏览器测试:curl 127.0.0.1:5000 进行测试访问
结果如下:
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ docker-compose up -d
Creating network "case1-flask-web_web" with driver "bridge"
Creating volume "case1-flask-web_redis-data" with local driver
Creating redis3 ... done
Creating flask-web ... done
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ curl 127.0.0.1:5000
欢迎访问! 网站已累计访问1次
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ curl 127.0.0.1:5000
欢迎访问! 网站已累计访问2次
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ curl 127.0.0.1:5000
欢迎访问! 网站已累计访问3次
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ docker-compose down
Stopping flask-web ... done
Stopping redis3 ... done
Removing flask-web ... done
Removing redis3 ... done
Removing network case1-flask-web_web
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ docker-compose up -d
Creating network "case1-flask-web_web" with driver "bridge"
Creating flask-web ... done
Creating redis3 ... done
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ curl 127.0.0.1:5000
欢迎访问! 网站已累计访问4次
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ curl 127.0.0.1:5000
欢迎访问! 网站已累计访问5次
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$ curl 127.0.0.1:5000
欢迎访问! 网站已累计访问6次
my-pc@ubuntu18-04:~/PycharmProjects/workspace/case1-flask-web$