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 开发环境,更能理解容器化技术的核心思想,为应对复杂开发场景打下坚实基础。

最新发布