1 概述
本示例详述了使用Docker部署Nginx作为反向代理,基于MySQL数据库的Flask项目的基本实现过程。使用docker compose更接近于实际生产环境的部署。
2 项目准备
请参考Docker部署Flask项目,基于MySQL数据库及Nginx代理
3 项目部署
3.1 编写 docker-compose.yaml
文件,并放到系统根目录
docker-compose.yaml
文件实际上是将分步部署执行的命令,按顺序进行编排,这里配置了自动重启
services:
mysql:
image: mysql:8.0.33
container_name: mysql
restart: always
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: demo
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- flask_net
flaskdemo:
build:
context: ./flaskDockerDemo
dockerfile: Dockerfile
container_name: flaskdemo
restart: always
volumes:
- "./flaskDockerDemo:/app"
networks:
- flask_net
depends_on:
- mysql
nginx:
image: nginx:1.27.1
container_name: nginx
restart: always
ports:
- "80:80"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./flaskDockerDemo/static:/app/static"
- "./flaskDockerDemo/uploads:/app/uploads"
depends_on:
- flaskdemo
networks:
- flask_net
networks:
flask_net:
name: flasknet
3.2 部署前清理
检查系统中是否已存在flasknet网络,mysql、flaskdemo、nginx容器和flaskdemo、nginx镜像,如果有先将它们从系统中删除
# 检查mysql、flaskdemo、nginx容器是否已存在
docker ps -a
# 如果已存在将其删除
docker rm -f nginx flaskdemo mysql
# 检查flaskdemo、nginx容器是否已存在
docker images
# 如果已存在将其删除
docker rmi nginx flaskdemo
# 检查flasknet网络是否已存在
docker network ps
# 如果已存在将其删除
docker network rm flasknet
或者使用暴力删除,注意以下命令会将所有镜像、容器删除
# 删除所有停止的容器
docker container prune
# 删除所有停止的镜像(除了<none>标签的镜像,即悬空镜像)
docker image prune -a
# 删除所有未使用的网络(除了默认网络)
docker network prune
3.3 部署
注意在当前登录用户根目录下执行下面命令
docker compose up -d
查看容器运行情况
docker compose ps
打开网页
系统重启测试OK
4 总结
使用Docker Compose部署项目,相对来说更为方便,在实际生产环境中的应用配置文件和yaml
文件配置信息会复杂很多,可参考项目中应用到的各种技术官方文档。