快速上手Docker部署Flask项目 附常见问题解决
一、准备 Flask 项目
1. 项目结构
- 有一个
app.py
文件作为主应用程序入口,内容示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
注意:一定要配置host为0.0.0.0,否则无法访问端口
2. 安装依赖
- 在项目目录下创建一个
requirements.txt
文件,列出项目所需要的 Python 包。例如:
flask
flask_sqlalchemy
二、创建 Dockerfile
1. 基础镜像选择
- 在项目根目录下创建一个
Dockerfile
。首先,选择一个合适的基础镜像。对于 Python Flask 项目,通常选择基于 Python 的官方镜像。例如,如果你使用 Python 3.10,你可以使用python:3.10 - slim
作为基础镜像。slim
版本的镜像体积较小,没有包含一些不必要的工具和库,减少镜像大小。
FROM python:3.10-slim
注意:如果出现错误,换国内源-阿里云即可解决
ERROR: failed to solve: python:3.8-slim: failed to resolve source metadata for docker.io/library/python:3.8-slim: unexpected status from HEAD request to https://xxxx.mirror.aliyuncs.com/v2/library/python/manifests/3.8-slim?ns=docker.io: 403 Forbidden
FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/python:3.11.1
2. 设置工作目录
- 设置容器内的工作目录,用于存放你的应用程序代码。
WORKDIR /app
3. 复制项目文件和安装依赖
- 将本地项目文件复制到容器的工作目录中。
COPY . /app
- 然后安装项目所需的 Python 依赖。运行
pip install
命令来安装requirements.txt
中列出的所有包。
RUN pip install -r requirements.txt
4. 暴露端口
- Flask 应用通常运行在一个端口上,如
5000
。你需要在 Dockerfile 中暴露这个端口,以便外部可以访问容器内的应用。
EXPOSE 5000
5. 设置启动命令
- 最后,设置容器启动时要执行的命令。对于 Flask 应用,通常是运行
python app.py
(假设你的主应用文件是app.py
)。
CMD ["python", "app.py"]
三、构建 Docker 镜像
1. 打开终端
- 在包含
Dockerfile
的项目目录下打开终端。
2. 构建镜像
- 运行
docker build
命令来构建镜像。命令格式为docker build -t your_image_name:tag.
,其中your_image_name
是你给镜像起的名字,tag
是镜像的标签(可以是版本号等,例如1.0
)。例如:
docker build -t my_flask_app:1.0 .
- 这个过程可能需要一些时间,因为它要根据
Dockerfile
中的指令来创建镜像,包括下载基础镜像、复制文件、安装依赖等步骤。
四、运行 Docker 容器
- 构建好镜像后,使用
docker run
命令来运行容器。例如:
docker run -p 1000:5000 my_flask_app:1.0
- 这里
-p 1000:5000
表示将主机的5000
端口映射到容器内的1000
端口。这样,你就可以通过在浏览器中访问http://localhost:1000
来查看 Flask 应用了。