为什么需要Docker?
在微服务和云原生时代,Docker已成为解决“开发环境与生产环境不一致”问题的核心工具。通过容器化技术,开发者可以快速构建、部署和扩展应用。本文将以一个Flask Web应用为例,演示如何从零完成Docker化部署。
一、环境准备
-
安装Docker
-
Windows/macOS:Docker Desktop
-
Linux:
curl -fsSL https://get.docker.com | bash sudo systemctl start docker
-
-
验证安装
docker --version # 输出示例:Docker version 24.0.6 docker run hello-world # 测试基础功能
二、创建Python示例应用
-
项目结构
myapp/ ├── app.py ├── requirements.txt └── Dockerfile
-
app.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, Dockerized World!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
-
requirements.txt
flask==3.0.2
三、编写Dockerfile
# 使用官方Python基础镜像
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
四、构建与运行容器
-
构建镜像
docker build -t my-flask-app .
-
运行容器
docker run -d -p 5000:5000 --name flask-container my-flask-app
-
访问应用
打开浏览器访问http://localhost:5000
,看到欢迎消息即成功!
五、高级技巧
1. 使用Docker Compose编排
创建 docker-compose.yml
:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app # 开发时实时同步代码
启动服务:
docker-compose up
2. 优化镜像大小
-
使用多阶段构建
-
清理无用缓存:
RUN apt-get update && apt-get install -y \ 必要的依赖 \ && rm -rf /var/lib/apt/lists/* # 清理APT缓存
六、常见问题排查
Q1:容器启动后立即退出
A:检查CMD命令是否正确,可通过docker logs flask-container
查看日志。
Q2:修改代码后未生效
A:开发环境建议使用volumes
挂载代码目录,生产环境需重新构建镜像。
Q3:端口冲突
A:修改映射端口,例如-p 8080:5000
将主机端口改为8080。
七、性能对比:容器化 vs 传统部署
场景 | 传统部署 | Docker部署 |
---|---|---|
环境配置时间 | 30min+ | 1min |
跨平台一致性 | 低 | 高 |
资源占用 | 高 | 低(共享内核) |
回滚速度 | 手动备份 | 秒级切换镜像 |
结语
Docker不仅简化了部署流程,更推动了DevOps文化的落地。建议从简单项目开始实践,逐步掌握镜像优化、网络配置等进阶技能。
你在Docker化过程中遇到过哪些“坑”?欢迎在评论区交流!
文章标签:#Docker
#容器化
#Python开发
#DevOps
#云原生
如果需要调整方向(例如Kubernetes实战、前端Vue项目容器化等),请随时告诉我!