docker_快速部署flask架构下的web容器

保证你的机器上安装了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="[email protected]"

# 更换为阿里云的 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的输出内容

你可能感兴趣的:(docker,flask,架构)