Docker入门实战:从零开始部署你的第一个Python应用
·
一、为什么要学习Docker?
传统应用部署经常遇到"在我本地是好的"问题,原因是开发、测试、生产环境不一致。Docker通过容器化技术解决了这一痛点,带来三大优势:
-
环境一致性:确保应用在任何环境运行一致
-
快速部署:秒级启动,简化运维流程
-
资源高效:比虚拟机更轻量,节省服务器资源
二、准备工作:安装Docker
Windows/Mac用户:
-
安装后启动,看到右下角Docker图标运行正常即可
Linux用户(Ubuntu示例):
sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker
验证安装:docker --version
三、实战:部署Python Flask应用
步骤1:创建项目文件
新建项目目录,包含以下文件:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return '<h1>Hello, Docker!</h1><p>这是我的第一个容器化应用</p>'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
# requirements.txt
flask==2.3.3
步骤2:编写Dockerfile
# 使用官方Python运行时作为父镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 将当前目录内容复制到容器的/app目录
COPY . /app
# 安装requirements.txt中的包
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口5000
EXPOSE 5000
# 定义环境变量
ENV FLASK_APP=app.py
# 容器启动时运行flask应用
CMD ["flask", "run", "--host=0.0.0.0"]
步骤3:构建Docker镜像
在项目目录下执行:
docker build -t my-python-app .
-
-t:给镜像打标签(名称) -
.:使用当前目录的Dockerfile
步骤4:运行容器
docker run -d -p 5000:5000 my-python-app
-
-d:后台运行 -
-p 5000:5000:端口映射(主机端口:容器端口)
步骤5:测试应用
浏览器访问:http://localhost:5000
看到欢迎页面即成功!
四、常用Docker命令速查
镜像管理:
docker images # 查看本地镜像
docker rmi 镜像ID # 删除镜像
docker pull 镜像名:版本 # 下载镜像
容器管理:
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker stop 容器ID # 停止容器
docker rm 容器ID # 删除容器
docker logs 容器ID # 查看容器日志
实战技巧:
# 进入容器内部(用于调试)
docker exec -it 容器ID /bin/bash
# 查看容器资源使用情况
docker stats
# 一键停止所有容器
docker stop $(docker ps -aq)
五、Dockerfile优化建议
1.使用.dockerignore文件
避免将不必要的文件复制到镜像:
__pycache__
*.pyc
.git
.DS_Store
2.多阶段构建(适合生产环境)
# 构建阶段
FROM python:3.9 as builder
RUN pip install --user flask
# 生产阶段
FROM python:3.9-slim
COPY --from=builder /root/.local /root/.local
COPY . /app
CMD ["flask", "run"]
3.使用特定版本标签
避免使用latest标签,确保稳定性:
FROM python:3.9-slim # 而不是 python:latest
六、遇到问题怎么办?
常见问题排查:
-
端口被占用:换一个端口映射
-p 8080:5000 -
镜像构建失败:检查Dockerfile语法和文件路径
-
容器立即退出:检查CMD命令是否正确
调试命令:
# 查看详细错误信息
docker logs 容器ID
# 交互式运行(测试用)
docker run -it my-python-app /bin/bash
更多推荐



所有评论(0)