Docker 安装 Python(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在现代软件开发中,环境一致性与可移植性是开发者关注的核心问题。无论是团队协作还是跨平台部署,传统环境配置方式常常面临版本冲突、依赖混乱等问题。Docker 安装 Python 提供了一种高效解决方案:通过容器化技术将 Python 运行环境与操作系统隔离,确保代码在任何环境中都能保持一致的行为。本文将从零开始,分步骤讲解如何使用 Docker 安装和管理 Python 开发环境,帮助开发者快速上手这一工具链。
一、Docker 基础概念:容器与镜像
1.1 容器与镜像的关系
可以将 Docker 镜像想象为“软件的集装箱模板”,而容器则是“基于模板运行的具体集装箱”。例如,一个 Python 3.9 镜像包含了 Python 解释器、基础库和运行时环境,开发者可以通过它启动多个独立的 Python 容器实例。
1.2 Docker 的核心优势
- 环境一致性:确保所有开发者使用相同的依赖版本。
- 轻量级隔离:容器共享宿主机内核,资源占用远低于虚拟机。
- 可移植性:镜像可以在任何支持 Docker 的环境中运行,避免“在我的机器上能跑”问题。
比喻:Docker 容器就像乐高积木,每个积木(镜像)都是预定义的组件,开发者只需拼装即可快速构建复杂应用。
二、安装 Docker 环境
2.1 安装 Docker
根据操作系统选择安装方式:
Ubuntu/Debian 系统
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
macOS/Windows 系统
通过 Docker Desktop 官方客户端安装,图形界面简化了配置流程。
2.2 验证安装
运行以下命令检查 Docker 是否正常工作:
docker --version
docker run hello-world
若输出包含“Hello from Docker!”,则表明环境已正确配置。
三、使用 Docker 安装 Python
3.1 直接运行 Python 容器
最简单的使用方式是直接拉取官方 Python 镜像并启动容器:
docker pull python:3.9
docker run -it python:3.9
此时会进入容器的 Shell 环境,可以直接执行 Python 代码:
print("Hello Docker!")
3.2 使用 Dockerfile 定制化环境
对于复杂项目,建议通过 Dockerfile
定义环境配置:
3.2.1 编写 Dockerfile
在项目根目录创建 Dockerfile
文件,内容示例:
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install flask requests
EXPOSE 5000
CMD ["python", "app.py"]
3.2.2 构建并运行容器
docker build -t my-python-app .
docker run -p 5000:5000 my-python-app
关键指令解释:
FROM
:指定基础镜像(如python:3.9
)。WORKDIR
:定义容器内工作目录。COPY
:将本地文件复制到容器。RUN
:执行命令安装依赖。CMD
:容器启动时的默认命令。
四、实战案例:Docker 包裹的 Flask 应用
4.1 项目结构
my-flask-app/
├── app.py
└── Dockerfile
4.2 app.py 内容
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")
4.3 Dockerfile 优化
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
4.4 运行与测试
docker build -t flask-demo .
docker run -d -p 5000:5000 flask-demo
五、高级技巧与常见问题
5.1 多阶段构建(Multi-Stage Build)
通过分阶段构建减少镜像体积:
FROM python:3.9 AS builder
RUN pip install --user flask==2.0.1
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .
CMD ["flask", "run"]
5.2 数据卷与持久化
挂载本地目录到容器,避免每次重建镜像:
docker run -v $(pwd)/data:/app/data -p 5000:5000 flask-demo
5.3 常见问题解决
问题 1:端口被占用
sudo lsof -i :5000
kill -9 <PID>
问题 2:Docker 镜像无法拉取
检查网络连接或使用镜像加速器(如阿里云):
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl restart docker
六、总结与展望
通过本文,开发者已掌握 Docker 安装 Python 的核心流程:从基础镜像选择、Dockerfile 编写,到容器运行与调试。Docker 的容器化技术不仅解决了环境依赖问题,还为微服务架构、CI/CD 流水线提供了基础支持。
未来,随着 Kubernetes 等容器编排工具的普及,Docker 的应用场景将更加广泛。建议读者继续深入学习 Docker 网络、多容器协作(如 docker-compose
)等进阶主题,进一步提升开发效率。
通过本文的实践,读者不仅能快速搭建 Python 开发环境,更能理解容器化技术的核心思想,为应对复杂开发场景打下坚实基础。