6.3 Python项目容器化

系列 - 应用程序容器化
实验目标
通过本实验,你将学习如何将Python应用程序容器化,把一个简单的Flask应用打包成Docker镜像,掌握基本的Dockerfile编写技巧。

本次实验我们将使用一个基于Flask框架开发的简单网页应用进行容器化实践。Flask是Python中轻量级的Web框架,广泛应用于各类Web开发项目。

技巧
Flask是Python中非常流行的轻量级Web框架,它简单易学,适合初学者入门Web开发。

项目地址:https://git.seahi.me/docker/python-flask-docker-hello-world

在没有使用Docker前,运行这个Python Flask项目通常需要以下步骤:

bash

# 使用pip软件包管理工具安装项目依赖
pip install -r requirements.txt

# 运行项目
python app.py
摘要
pip是Python的包管理工具,用于安装和管理Python包。requirements.txt文件包含了项目所需的所有依赖包及其版本信息。
  1. 编写Dockerfile将该Python Flask项目打包到Docker镜像中
  2. 父镜像使用 python:3
  3. 确保容器启动后应用可以正常访问

EXPOSE指令用于声明容器运行时将会使用的网络端口。它在Dockerfile中扮演着重要角色,主要有两个作用:

  1. 文档作用:向使用镜像的人表明容器需要映射哪些端口
  2. 功能作用:当使用docker run -P(大写P)时,Docker会自动将EXPOSE声明的所有端口映射到主机上的随机端口
EXPOSE的常见误解
EXPOSE指令不会实际开放端口,它只是一种声明。要让容器端口可从外部访问,仍需在docker run命令中使用-p-P选项进行端口映射。

在Dockerfile中:

dockerfile

EXPOSE 80 443

这声明容器将使用80和443端口,但实际映射仍需通过以下方式完成:

bash

# 将容器的80端口映射到主机的8080端口
docker run -p 8080:80 镜像名称

# 或者使用大写P自动映射所有EXPOSE的端口到随机端口
docker run -P 镜像名称
Flask应用端口暴露
对于Flask应用,通常需要暴露5000端口(Flask的默认端口)。在Dockerfile中可以添加:EXPOSE 5000
Dockerfile基本结构

一个完整的Dockerfile通常包含以下部分:

  1. 基础镜像(FROM)
  2. 工作目录设置(WORKDIR)
  3. 文件复制(COPY)
  4. 依赖安装(RUN)
  5. 端口暴露(EXPOSE)
  6. 启动命令(CMD)

完成Dockerfile编写后,可以按照以下步骤验证:

bash

# 构建Docker镜像
docker build -t python-flask-app .

# 运行容器
docker run --rm -d -p 5000:5000 python-flask-app

相关内容