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

保证你的机器上安装了docker 并正常启动可参考
阿里镜像站docker

flask项目结构如下:

bash 复制代码
my-flask-app/
├── Dockerfile
├── app.py
├── requirements.txt
└── config/
    └── settings.py

my-flask-app/

这是你的项目根目录,包含了所有与 Flask 应用相关的文件和配置。

Dockerfile

这个文件包含了构建 Docker 镜像所需的指令和配置。Dockerfile 定义了如何从基础镜像开始,逐步添加应用程序所需的所有组件(例如安装依赖、复制文件、设置环境变量等)。

bash 复制代码
# 基于 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 通常包含应用的主要逻辑、路由处理和其他功能实现。

python 复制代码
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 会使用这个文件来安装应用所需的依赖。比如,文件可能包含:

bash 复制代码
Flask==2.0.1
gunicorn==20.1.0

config/

这个目录通常包含配置文件,供 Flask 应用使用。配置文件可以包括数据库设置、API 密钥、应用参数等。

settings.py

这是一个配置文件,通常用于存储应用的配置设置,比如数据库连接信息、应用环境(开发、测试、生产)等。Flask 应用可以从这个文件读取配置,来调整其行为。

构建镜像

在包含Dockerfile目录下 : 末尾的 . 表示当前目录下 通过Dockerfile文件来构建一个名为my-flask的容器

bash 复制代码
[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

构建容器

bash 复制代码
[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

验证

bash 复制代码
浏览器输入:
http://localhost:5000/   应该可以看到app.py的输出内容
相关推荐
wellshake2 小时前
在 Docker 中部署无头 Chrome:在 Browserless 中运行
chrome·docker·容器
东城绝神4 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版副本集群》
linux·运维·mongodb·架构
温、10 小时前
【docker学习笔记】docker概念和命令
笔记·docker·持续部署
GuangdongQi11 小时前
pm2 进程守护python flask
开发语言·python·flask
Adolf_199311 小时前
Flask 设置session 自定义登录验证
服务器·前端·flask
ac-er888811 小时前
如何在Flask中处理表单数据
后端·python·flask
Just_Paranoid12 小时前
828华为云征文|部署在线文件管理器 Spacedrive
docker·华为云·文件管理·flexus云服务器·spacedrive
玖石书12 小时前
Docker 容器网络技术
运维·docker·容器
爱吃番茄的小狐狸18 小时前
Docker镜像下载-使用github action- 解决无法下载docker镜像的问题
docker·容器·github
andy7_19 小时前
运行在docker环境下的图片压缩小工具
运维·docker·容器