保证你的机器上安装了docker 并正常启动可参考
阿里镜像站docker
flask项目结构如下:
my-flask-app/
├── Dockerfile
├── app.py
├── requirements.txt
└── config/
└── settings.py
my-flask-app/
这是你的项目根目录,包含了所有与 Flask 应用相关的文件和配置。
Dockerfile
这个文件包含了构建 Docker 镜像所需的指令和配置。Dockerfile 定义了如何从基础镜像开始,逐步添加应用程序所需的所有组件(例如安装依赖、复制文件、设置环境变量等)。
# 基于 centos:7 作为基础镜像
FROM centos:7
# 设置维护者信息
LABEL maintainer="your_email@example.com"
# 更换为阿里云的 CentOS 镜像源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum clean all && yum makecache
# 安装 Python 和 pip
RUN yum -y update && \
yum -y install epel-release && \
yum -y install python3 python3-pip && \
yum clean all
# 设置工作目录
WORKDIR /app
# 复制本地的 requirements.txt 到镜像中的 /app 目录
COPY . /app
# 查看 requirements.txt 内容,确认是否存在
RUN cat /app/requirements.txt
# 安装 Python 依赖
# 使用阿里云的 Python 镜像源
RUN pip3 install --no-cache-dir -r /app/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 暴露 Flask 应用的端口(例如5000)
EXPOSE 5000
# 设置启动命令
CMD ["python3", "app.py"]
基础镜像:使用 FROM 指令指定基础镜像。
维护者信息:使用 LABEL 指令添加镜像的元数据。
安装软件:使用 RUN 指令执行命令来安装软件包。
复制文件:使用 COPY 或 ADD 指令将文件复制到镜像中。
设置工作目录:使用 WORKDIR 指令指定工作目录。
设置环境变量:使用 ENV 指令设置环境变量。
暴露端口:使用 EXPOSE 指令声明容器的网络端口。
运行命令:使用 CMD 或 ENTRYPOINT 指令定义容器启动时执行的命令。
app.py
这是你的 Flask 应用的主要代码文件。Flask 是一个轻量级的 Python Web 框架,app.py 通常包含应用的主要逻辑、路由处理和其他功能实现。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker World!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
requirements.txt
这个文件列出了你的 Flask 应用所需的所有 Python 包及其版本。Dockerfile 会使用这个文件来安装应用所需的依赖。比如,文件可能包含:
Flask==2.0.1
gunicorn==20.1.0
config/
这个目录通常包含配置文件,供 Flask 应用使用。配置文件可以包括数据库设置、API 密钥、应用参数等。
settings.py
这是一个配置文件,通常用于存储应用的配置设置,比如数据库连接信息、应用环境(开发、测试、生产)等。Flask 应用可以从这个文件读取配置,来调整其行为。
构建镜像
在包含Dockerfile目录下 : 末尾的 . 表示当前目录下 通过Dockerfile文件来构建一个名为my-flask的容器
[root@localhost my-flask-app]# docker build -t my-flask .
[+] Building 18.2s (12/12) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.09kB 0.0s
=> [internal] load metadata for docker.io/library/centos:7 2.7s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/7] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 643B 0.0s
=> CACHED [2/7] RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliy 0.0s
=> CACHED [3/7] RUN yum -y update && yum -y install epel-release && yum -y install python3 python3-pip && yum clean all 0.0s
=> CACHED [4/7] WORKDIR /app 0.0s
=> [5/7] COPY . /app 0.0s
=> [6/7] RUN cat /app/requirements.txt 0.6s
=> [7/7] RUN pip3 install --no-cache-dir -r /app/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ 14.8s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:4836d2469ecf52ceab01d2338fc88f4c5cfdb4e59eca822d0d78e19214a04ca0
# 查看
[root@localhost my-flask-app]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-flask latest 4836d2469ecf 47 minutes ago 953MB
nginx latest 39286ab8a5e1 4 weeks ago 188MB
构建容器
[root@localhost my-flask-app]# docker run -d -p 5000:5000 my-flask
a869bd32ff5471c1cb61df92c4322172d4f86dd474f1d04e82fbfdd426cc59ee
[root@localhost my-flask-app]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a869bd32ff54 my-flask "python3 app.py" 7 seconds ago Up 5 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp flamboyant_brattain
验证
浏览器输入:
http://localhost:5000/ 应该可以看到app.py的输出内容