docker-compose的flask自动部署
#本例子的环境为 docker:Docker version 18.09.7 docker-composer:docker-compose version 1.23.1
1.目录结构:
2.docker的安装
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
3.docker-compose的安装
#先下载docker-compose二进制wnejian sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #再赋予该文件可执行权限 sudo chmod +x /usr/local/bin/docker-compose #最后检查docker-compose是否安装成功 docker-compose --version
4.docker-compose.yaml的内容
version: "3.6"
services: flask-web: build: . ports: - "5000:5000" container_name: flask-web redis: image: redis container_name: redis3 # PS:注意缩进,每层的空格数要保持一直,特别注意冒号在参数设置时留出一个空格 #ps:这个是在服务上设置的,如在本地的虚拟上,可能会出问题
5.Dockerfile文件的内容
#flask web app v1.0 # 搭建一个基于flask的web项目,实现了简单的访问统计 # 第一步: 获取一个镜像: python3.6 FROM python:alpine3.6 # 第二部: 拷贝项目代码到镜像中 ADD(自动尝试解压缩,不建议)/COPY COPY ./flask-web-code /code # 第三部: 安装项目的依赖环境: 第三方模块 flaks reids # 切换工作目录用WORKDIR,类似于cd命令 WORKDIR /code RUN pip install -r requirements.txt # 第四部: 配置项目的启动 CMD参数 python app.py CMD ["python", "app.py"]
6.app.py文件的内容
import time import redis from flask import Flask app = Flask(__name__) # 此处host是docker-compose.yaml配置文件中 redis的服务的名称 cache = redis.Redis(host='redis', port=6379) def get_hit_count(): """利用redis统计访问次数""" retries = 5 # 由于当redis重启时,可能会有短暂的无法访问redis # 循环的在作用默认重试5次 while True: try: # redis的incr方法, 如果hits值存在自动+1, 否则新增该键,值为1 return cache.incr('hits') except redis.exceptions.ConnectionError as e: if retries == 0: raise e retries -= 1 time.sleep(0.5) @app.route('/') def main(): count = get_hit_count() return "欢迎访问! 网站已累计访问{}次\n".format(count) if __name__ == '__main__': app.run(host='0.0.0.0', debug=True)
7. requirements.txt文件的内容
#环境依赖包 redis flask
8.启动
sudo docker-compose up
#ps:在case1-flask-web的文件下输入