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的输出内容
相关推荐
山沐与山3 分钟前
【K8S】Kubernetes架构与原理详解
容器·架构·kubernetes
lpfasd1235 分钟前
一次 IDE Agent 死循环问题的架构复盘
ide·架构
Coder个人博客7 分钟前
Apollo 9.0.0 自动驾驶系统整体架构分析
人工智能·架构·自动驾驶
深圳英康仕17 分钟前
ARM工控机openEuler系统Docker安装指南
arm开发·docker·rk3588·工控机
山沐与山30 分钟前
【Docker】Docker容器技术详解
运维·docker·容器
互联网哪些事情1 小时前
Docker 容器化部署宝塔 Linux 面板
linux·docker·容器·宝塔云服务器
坚定信念,勇往无前1 小时前
docker安装mongodb
mongodb·docker·容器
Destiny_where1 小时前
k8s常用指令集合
linux·docker·kubernetes
叮咚侠1 小时前
将已创建的Elasticsearch 8.12.0的docker容器中的数据挂载到宿主机操作步骤
运维·elasticsearch·docker·容器·kibana
wang6021252182 小时前
OCR服务-本地打包docker+docker下载ssh调试
docker·ssh·ocr