John Doe
Articles3
Tags1
Categories0

一言

Archive

Docker入门指南:用容器化部署你的第一个Python应用

Docker入门指南:用容器化部署你的第一个Python应用

前言:为什么需要容器化?

你是否遇到过这些场景?

  • “这个程序在我本地能跑,为什么到服务器就报错?”
  • “Python版本升级后项目依赖全乱了…”
  • “新同事配置开发环境花了整整两天”

Docker通过容器化技术将应用及其运行环境打包成标准化的单元,实现”一次构建,处处运行”。本文将以一个Flask应用为例,带你完成从零到一的容器化实践。


一、环境准备

1.1 安装Docker

1
2
3
4
5
# Ubuntu示例(其他系统见官方文档)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker --version # 验证安装

1.2 创建Python应用

app.py

1
2
3
4
5
6
7
8
9
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

1
flask==2.0.3

二、编写Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 第一阶段:构建环境
FROM python:3.9-slim as builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# 第二阶段:生产环境
FROM python:3.9-slim

WORKDIR /app
# 从builder阶段复制已安装的包
COPY --from=builder /root/.local /root/.local
COPY app.py .

# 确保PATH包含用户安装目录
ENV PATH=/root/.local/bin:$PATH

# 安全建议:避免使用root用户
RUN useradd -m appuser && chown -R appuser /app
USER appuser

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

🔍 关键解析

  • 多阶段构建:减小最终镜像体积(从约1GB缩减到约130MB)
  • 权限控制:创建非root用户提升安全性
  • 路径配置:确保能找到用户级安装的包

三、构建与运行

3.1 构建镜像

1
docker build -t my-python-app .

3.2 启动容器

1
docker run -d -p 5000:5000 --name myapp my-python-app

验证访问:

1
2
curl http://localhost:5000
# 输出:Hello Docker World!

3.3 常用命令速查

命令 说明
docker ps -a 查看所有容器状态
docker logs myapp 查看实时日志
docker exec -it myapp bash 进入容器shell
docker stop myapp 停止容器

四、进阶:使用docker-compose

当需要关联数据库等服务时,推荐使用服务编排:

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'

services:
web:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=production
depends_on:
- redis

redis:
image: "redis:alpine"
volumes:
- redis_data:/data

volumes:
redis_data:

启动命令:

1
docker-compose up -d

五、常见问题排查

5.1 容器内时间不对?

1
2
# 在Dockerfile中加入
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

5.2 如何清理无用资源?

1
docker system prune -a --volumes

5.3 查看镜像层级结构

1
docker image history my-python-app

结语

通过本文你已掌握了:

  • ✅ Docker镜像构建的核心方法
  • ✅ 多阶段构建的优化技巧
  • ✅ 容器化部署的完整流程
  • ✅ 常见问题的解决方案

下一步学习建议

  • 研究Docker网络配置
  • 探索Kubernetes容器编排
  • 了解CI/CD中的容器化实践

💬 讨论话题:你在容器化过程中遇到过哪些”坑”?欢迎在评论区分享你的经历!


延伸阅读


本文示例代码已上传至GitHub仓库:https://github.com/example/docker-python-demo
原创文章,转载请注明出处

如需PDF版本或完整示例项目,可通过下方邮箱联系我📮


Tips

  • 实际部署时建议添加--restart=always参数实现自动重启
  • 生产环境务必配置适当的日志轮转策略
  • 可使用docker scan命令进行安全漏洞扫描

希望这篇指南能成为你容器化之旅的良好开端!🚀

Author:John Doe
Link:https://0721.ren/2025/03/24/Post2/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可