在 Docker 中安装 Python 非常简单,可以使用官方的 Python 镜像来快速部署 Python 环境。以下是一个简单的教程,指导你如何使用 Docker 安装和运行 Python。

1. 拉取 Python 镜像

首先,从 Docker Hub 拉取官方的 Python 镜像。你可以选择不同版本的 Python,例如 Python 3.9 或 3.10,或者使用包含特定操作系统(如 Debian 或 Alpine)的镜像。

1.1 拉取 Python 镜像(Python 3.x)

sudo docker pull python:3.9

这会拉取 Python 3.9 的官方镜像。如果你需要其他版本的 Python,可以指定不同的版本号(如 python:3.10)。

1.2 拉取 Python 镜像(小型镜像:Alpine)

如果你需要一个更轻量的镜像,可以选择基于 Alpine 的 Python 镜像:

sudo docker pull python:3.9-alpine

Alpine 镜像非常小,适合需要节省空间的环境,但有些库可能需要额外的依赖。

2. 运行 Python 容器

一旦镜像拉取完成,你可以启动一个 Python 容器并进入 Python 交互模式。

2.1 运行 Python 容器

使用以下命令启动一个 Python 容器并进入 Python 交互式环境:

sudo docker run -it python:3.9

  • -it:使容器交互式运行。
  • python:3.9:指定要运行的 Python 镜像。
  • 运行命令后,你将进入容器内部,并自动进入 Python 解释器。

    2.2 退出 Python 容器

    在 Python 解释器中,你可以像通常那样编写 Python 代码。当你完成时,可以输入 exit() 或按 Ctrl + D 来退出 Python 交互模式。

    3. 运行 Python 脚本

    你也可以在 Docker 容器中运行 Python 脚本文件。假设你有一个 app.py 脚本,你可以通过以下命令将它传递给容器并执行:

    sudo docker run -v /path/to/your/script:/usr/src/app -w /usr/src/app python:3.9 python app.py

  • -v /path/to/your/script:/usr/src/app:将本地的 Python 脚本文件夹挂载到容器中。
  • -w /usr/src/app:设置工作目录为 /usr/src/app
  • python app.py:在容器中运行 app.py 脚本。
  • 4. 使用 Dockerfile 构建自定义 Python 镜像

    如果你需要在容器中安装一些额外的 Python 库(如 requestsnumpy 等),你可以创建一个 Dockerfile 来定制镜像。

    4.1 创建 Dockerfile

    创建一个文件名为 Dockerfile 的文件,内容如下:

    # 基于 Python 3.9 镜像 FROM python:3.9 # 设置工作目录 WORKDIR /usr/src/app # 复制本地代码到容器中 COPY . . # 安装依赖项 RUN pip install --no-cache-dir -r requirements.txt # 运行 Python 脚本 CMD ["python", "app.py"]

    在这个 Dockerfile 中:

  • FROM python:3.9:指定基础镜像为 Python 3.9。
  • WORKDIR /usr/src/app:设置工作目录为 /usr/src/app
  • COPY . .:将本地的文件复制到容器中。
  • RUN pip install --no-cache-dir -r requirements.txt:安装 requirements.txt 中列出的依赖。
  • CMD ["python", "app.py"]:设置容器启动时执行 app.py 脚本。
  • 4.2 构建镜像

    在包含 Dockerfile 的目录中运行以下命令构建自定义镜像:

    sudo docker build -t my-python-app .

    4.3 运行容器

    构建完成后,使用以下命令启动容器:

    sudo docker run -it my-python-app

    5. 安装额外的 Python 库

    如果你需要在运行的容器中安装额外的 Python 库,可以使用以下命令进入容器并安装库:

    5.1 启动并进入容器

    sudo docker run -it python:3.9 /bin/bash

    5.2 安装库

    进入容器后,使用 pip 安装所需的库:

    pip install requests

    安装完成后,你就可以在 Python 代码中使用这些库了。

    6. 查看运行中的容器

    如果你启动了一个容器并希望查看其状态或获取更多信息,可以使用以下命令:

    sudo docker ps

    此命令将列出所有运行中的容器。你还可以查看所有容器(包括停止的):

    sudo docker ps -a

    7. 停止和删除容器

    当你不再需要某个容器时,可以停止并删除它:

    7.1 停止容器

    sudo docker stop <container_id>

    7.2 删除容器

    sudo docker rm <container_id>

    你可以通过 docker ps -a 获取容器的 ID。

    8. 持久化数据

    如果你需要持久化数据(例如,保存安装的 Python 库或处理的文件),可以使用 Docker 卷。通过将本地目录挂载到容器,你可以确保数据不会随着容器的删除而丢失。

    例如,挂载本地目录到容器中的 /usr/src/app 目录:

    sudo docker run -v /path/to/your/data:/usr/src/app -it python:3.9

    这样,你的容器内的 /usr/src/app 目录将与本地的 /path/to/your/data 目录同步。

    9. 使用 Docker Compose

    如果你的应用涉及多个服务(例如,Python + Redis、Python + MySQL),可以使用 Docker Compose 来管理这些服务。

    9.1 创建 docker-compose.yml

    例如,创建一个 Python 与 Redis 集成的 docker-compose.yml 文件:

    version: '3.1' services: python: image: python:3.9 container_name: python-app volumes: - ./path/to/your/python/app:/usr/src/app networks: - app-network redis: image: redis:latest container_name: redis-container networks: - app-network networks: app-network: driver: bridge

    9.2 启动服务

    使用以下命令启动所有服务:

    sudo docker-compose up -d

    这将启动 Python 和 Redis 服务并将它们连接到同一个网络。

    总结

    通过 Docker 安装和配置 Python 环境,可以为开发和生产环境提供高效、灵活的支持。你可以使用官方的 Python 镜像,快速启动 Python 容器,安装所需的库,并通过 Dockerfile 和 Docker Compose 自定义和管理多服务环境。此外,Docker 还可以帮助你持久化数据,方便进行开发和部署。


    10. Docker 中使用 Python 创建 Web 应用

    你可以使用 Docker 来构建和部署一个简单的 Python Web 应用,通常推荐使用 Flask 或 Django 作为 Python 的 Web 框架。这里我们使用 Flask 框架来创建一个简单的 Web 应用。

    10.1 创建 Flask 应用

    首先,创建一个简单的 Flask 应用。例如,创建一个名为 app.py 的 Python 文件,内容如下:

    from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return "Hello, Docker World!" if __name__ == "__main__": app.run(host='0.0.0.0', port=5000)

    此代码启动了一个 Flask Web 应用,并监听 0.0.0.0:5000,使其可以从外部访问。

    10.2 创建 requirements.txt 文件

    在同一个目录下,创建一个 requirements.txt 文件,列出 Flask 依赖项:

    Flask==2.1.1

    10.3 创建 Dockerfile

    为了将应用容器化,我们需要一个 Dockerfile。创建一个名为 Dockerfile 的文件,内容如下:

    # 使用 Python 3.9 官方镜像作为基础镜像 FROM python:3.9 # 设置工作目录为 /app WORKDIR /app # 复制当前目录的所有文件到容器的 /app 目录 COPY . /app # 安装 Python 依赖 RUN pip install --no-cache-dir -r requirements.txt # 设置容器启动时的默认命令 CMD ["python", "app.py"]

    Dockerfile 执行以下操作:

  • 从 Python 3.9 官方镜像开始构建。
  • 将本地的所有文件复制到容器内的 /app 目录。
  • 安装 requirements.txt 中列出的依赖项。
  • 默认启动 Flask 应用。
  • 10.4 构建 Docker 镜像

    在包含 Dockerfileapp.py 的目录下运行以下命令来构建 Docker 镜像:

    sudo docker build -t python-flask-app .

    此命令会构建一个名为 python-flask-app 的镜像。

    10.5 运行容器

    构建完成后,使用以下命令启动容器并映射容器的端口到本地端口:

    sudo docker run -p 5000:5000 python-flask-app

  • -p 5000:5000:将本地的 5000 端口映射到容器的 5000 端口。
  • python-flask-app:是你在构建镜像时指定的镜像名称。
  • 此时,你可以在浏览器中访问 http://localhost:5000 来查看 Flask 应用的输出。

    10.6 使用 Docker Compose 启动多容器应用

    如果你需要将 Flask 应用与其他服务(如数据库或缓存)一起部署,可以使用 Docker Compose 来简化管理。

    例如,假设你希望将 Flask 应用与 Redis 一起运行,可以创建一个 docker-compose.yml 文件:

    version: '3.1' services: python: image: python:3.9 container_name: python-flask working_dir: /app volumes: - .:/app command: python app.py ports: - "5000:5000" depends_on: - redis redis: image: redis:latest container_name: redis-server networks: default: driver: bridge

  • depends_on 确保在启动 Flask 容器时,Redis 容器先启动。
  • redis 是 Redis 服务的名字,Flask 容器可以通过该名称访问 Redis。
  • 10.7 启动多容器服务

    docker-compose.yml 文件所在的目录中运行以下命令:

    sudo docker-compose up -d

    此命令将启动 Flask 应用和 Redis 容器,Flask 应用将运行在 5000 端口,并与 Redis 集成。

    11. 使用 Docker 执行单元测试

    在开发 Python 应用时,执行单元测试是确保代码质量的一部分。Docker 提供了一个方便的环境来执行测试。

    11.1 安装测试依赖

    假设你使用 unittestpytest 进行测试。在你的 requirements.txt 中添加测试库:

    Flask==2.1.1 pytest==7.1.2

    11.2 创建测试文件

    创建一个名为 test_app.py 的文件,内容如下:

    import unittest from app import app class TestFlaskApp(unittest.TestCase): def setUp(self): self.app = app.test_client() self.app.testing = True def test_hello_world(self): response = self.app.get('/') self.assertEqual(response.data, b"Hello, Docker World!") if __name__ == '__main__': unittest.main()

    此测试用例验证 Flask 应用的根路由是否返回正确的文本。

    11.3 构建和运行容器

    重新构建 Docker 镜像:

    sudo docker build -t python-flask-app .

    然后,运行容器并执行测试:

    sudo docker run --rm python-flask-app pytest

    --rm 标志会在测试完成后删除容器,确保清理环境。

    12. 使用 Docker 部署到生产环境

    当你的 Python 应用准备好部署到生产环境时,Docker 可以帮助你轻松地实现这一点。你可以将容器推送到 Docker Hub 或私有注册表,然后在生产环境中拉取并运行。

    12.1 推送镜像到 Docker Hub

    首先,确保你已经登录 Docker Hub:

    sudo docker login

    然后,标记镜像并推送:

    sudo docker tag python-flask-app <your-dockerhub-username>/python-flask-app sudo docker push <your-dockerhub-username>/python-flask-app

    12.2 在生产环境中拉取并运行

    在生产环境中,你可以从 Docker Hub 拉取镜像并运行它:

    sudo docker pull <your-dockerhub-username>/python-flask-app sudo docker run -p 5000:5000 <your-dockerhub-username>/python-flask-app

    总结

    通过 Docker,你可以方便地构建、测试、部署和管理 Python 应用。无论是创建简单的 Flask Web 应用,还是将多个服务(如 Redis、MySQL)整合到同一个环境中,Docker 都提供了灵活的容器化解决方案。此外,通过 Docker Compose 你可以轻松地管理多容器应用,并通过 Docker Hub 等工具将你的应用部署到生产环境。

    作者:小宝哥Code

    物联沃分享整理
    物联沃-IOTWORD物联网 » Docker上Python安装指南

    发表回复