Docker 安装 Python(建议收藏)

为什么你需要用 Docker 安装 Python

在开发过程中,你是否遇到过这样的情况:本地环境运行得好好的代码,一部署到服务器就报错?或者新同事刚来,配置 Python 环境花了整整一天?这些问题的根源,往往在于“环境不一致”。

想象一下,Python 就像一辆汽车,而你的开发环境就是一条公路。如果你在城市里用的是汽油车,而服务器上只支持柴油车,那这辆车根本开不动。Docker 的出现,就是为了解决这种“环境差异”的难题。它通过容器技术,把 Python 运行环境打包成一个独立的“集装箱”,无论你把它放到哪里,都能稳定运行。

Docker 安装 Python 的核心优势在于:环境隔离。每个项目可以拥有自己专属的 Python 版本和依赖库,互不干扰。这就像你为每个项目配备一辆专属的汽车,不会因为某个项目需要电动车而让其他项目被迫改用电动车。

更重要的是,Docker 让跨平台协作变得无比简单。你写好的代码,只要 Dockerfile 配置正确,别人只需一行命令就能复现你的开发环境。再也不用担心“在我电脑上是好的”这种尴尬问题。

安装 Docker:迈出第一步

在开始 Docker 安装 Python 之前,你需要先安装 Docker 本身。它就像一个“操作系统”级别的工具,负责管理所有的容器。

对于 Windows 和 macOS 用户,推荐使用 Docker Desktop。它提供图形化界面,安装过程非常直观。访问 Docker 官网 下载对应版本,运行安装程序,按照提示一步步操作即可。安装完成后,打开 Docker Desktop,你会看到一个绿色的图标,表示服务已启动。

Linux 用户则可以通过包管理器安装。以 Ubuntu 为例,执行以下命令:

sudo apt update

sudo apt install -y ca-certificates curl gnupg

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo usermod -aG docker $USER

注意:执行 usermod 命令后,必须重新登录系统才能生效。否则后续运行 Docker 命令会提示权限不足。

安装完成后,验证 Docker 是否正常工作:

docker --version

docker run hello-world

使用官方镜像快速安装 Python

Docker 官方提供了多种 Python 镜像,覆盖了不同版本和精简程度。最常用的是 python:3.11-slim,它包含 Python 3.11 且体积较小,适合生产环境。

我们先尝试运行一个最简单的 Python 容器:

docker run -it --rm python:3.11-slim python --version

命令解析:

  • docker run:启动一个新容器
  • -it:交互模式(i) + 终端分配(t),允许你输入命令
  • --rm:容器退出后自动删除,避免垃圾文件积累
  • python:3.11-slim:使用的镜像名称
  • python --version:进入容器后执行的命令

执行后你会看到输出 Python 3.11.9,说明 Docker 安装 Python 成功了!

这个过程就像租用一辆已经装好工具的移动工作台。你不需要自己买电钻、锯子,只要打开工作台,就能立刻开始工作。

创建 Python 项目容器:从零开始

接下来,我们创建一个完整的 Python 项目,并通过 Docker 安装 Python 来运行它。假设我们要开发一个简单的 Web 服务。

首先,创建项目目录并编写代码:

mkdir my-flask-app
cd my-flask-app

cat > app.py << 'EOF'
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>欢迎使用 Docker 部署的 Flask 应用!</h1>'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
EOF

然后创建 requirements.txt 文件,列出依赖:

Flask==2.3.3

现在创建 Dockerfile,这是 Docker 安装 Python 的核心配置文件:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install -q -r requirements.txt

COPY . .

EXPOSE 5000

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

关键点:Dockerfile 的每一条指令都是一次文件系统层的变更。COPYRUN 指令会触发新的层,这些层会被缓存,提高构建效率。

构建镜像:

docker build -t my-flask-app:latest .
  • -t:为镜像指定标签,格式为 名称:版本
  • .:构建上下文路径,即当前目录

运行容器:

docker run -p 8000:5000 my-flask-app:latest
  • -p 8000:5000:将宿主机的 8000 端口映射到容器的 5000 端口

打开浏览器访问 http://localhost:8000,你就能看到欢迎页面了!

进阶技巧:管理 Python 环境与数据

Docker 安装 Python 不仅限于运行代码,还可以用于开发调试。你可以在容器内交互式使用 Python:

docker run -it --rm python:3.11-slim bash

python

对于需要持久化数据的场景,可以使用 Docker 卷(Volume):

docker volume create my-data

docker run -it --rm \
  -v my-data:/data \
  python:3.11-slim \
  bash

echo "这是持久化数据" > /data/test.txt

docker volume inspect my-data

你还可以通过 docker-compose.yml 管理多容器应用:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - ./app:/app
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass

运行 docker-compose up 即可启动整个应用栈。

常见问题与解决方案

在 Docker 安装 Python 的过程中,你可能会遇到以下问题:

问题1:权限不足 错误信息:permission denied while trying to connect to the Docker daemon socket

解决方案:确保当前用户在 docker 用户组中,执行 sudo usermod -aG docker $USER 后重新登录。

问题2:网络连接失败 错误信息:Could not connect to the Docker daemon

解决方案:检查 Docker Desktop 是否正在运行,或在 Linux 上运行 sudo systemctl start docker

问题3:依赖安装失败 错误信息:Could not find a version that satisfies the requirement ...

解决方案:检查网络连接,或尝试使用国内镜像源:

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

问题4:容器启动后立即退出 检查 CMD 指令是否正确,确保主进程持续运行。对于 Web 服务,要确保 app.run() 没有异常。

总结与实践建议

通过本文,你已经掌握了 Docker 安装 Python 的核心技能。从环境隔离到项目部署,Docker 让 Python 开发变得前所未有的简单和可靠。

记住,Docker 安装 Python 不仅仅是一个命令,而是一种开发范式。它让你专注于业务逻辑,而不是环境配置。无论是个人项目还是团队协作,它都能显著提升开发效率。

建议你立即动手实践:创建一个自己的 Python 项目,编写 Dockerfile,构建镜像,运行容器。你会发现,原来“环境配置”也可以如此优雅。

当你在深夜调试代码时,不再需要反复确认“是不是环境问题”,因为你的 Docker 容器已经为你保证了环境的一致性。这正是现代开发者的必备技能。