使用 Docker 容器化 Flask 应用(含 Docker 安装指南)实践

安装 Docker

1. 卸载旧版本(如果有)

sudo apt-get remove docker docker-engine docker.io containerd runc

2. 安装依赖

sudo apt-get update
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

3. 添加 Docker 官方 GPG 密钥

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4. 配置清华大学 Docker 镜像源

curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5. 验证安装

docker version
docker compose version

容器化 Flask 应用

1. 创建 Flask 应用

在本例中,我们使用之前制作的一个简易 Flask 应用,它包括用户注册、登录和生成 JWT 令牌等功能。

https://github.com/rainding0311/ruian-iam

2. 创建 Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 5001

CMD ["python", "app.py"]

3. 创建 requirements.txt

flask
mysql-connector-python
bcrypt
pyjwt

4. 构建 Docker 镜像

docker build -t flask-oauth2-app .

5. 运行 Docker 容器

docker run -d -p 5001:5001 flask-oauth2-app

3. 补充:代码中的密码安全问题

避免将数据库密码等敏感信息硬编码在代码中,建议使用如下方法:

  • 使用 .env 文件 + python-dotenv 加载环境变量
  • 或使用 Docker -e 参数传入变量

示例 .env 文件:

DB_PASSWORD=your_password

在 Python 中读取:

import os
from dotenv import load_dotenv
load_dotenv()
db_password = os.getenv("DB_PASSWORD")

在 Dockerfile 中添加:

RUN pip install python-dotenv