Docker 简明教程

How to Run Python in a Docker Container?

Python 凭借其简单性、丰富的库集和通用性彻底改变了软件开发行业。当项目随着开发和部署环境的复杂性增加而扩展时,管理 Python 依赖项变得非常困难。因此,确保运行时在多个环境中保持一致会面临重大挑战。此时,在 Docker 中运行 Python 就派上用场了。

Docker 是一个领先的容器化平台,提供一种精简的方法来跨不同环境打包、分发和运行应用程序。在 Docker 中运行 Python 有许多好处——它增强了可移植性、依赖项管理、隔离和可扩展性。Docker 以轻量级容器封装 Python 应用程序及其依赖项,确保在开发、测试和生产环境中保持行为一致。

在 Docker 容器内运行 Python 的主要方法有:

  1. 使用 Dockerfile 与官方 Python Docker 基础镜像。

  2. 利用 Docker Compose 定义并运行多容器 Python Docker 应用程序。

  3. 在 Docker 容器内创建一个虚拟环境以隔离 Python 依赖项。

在本章中,让我们讨论如何通过逐步方法、Docker 命令和示例,使用不同的方法在 Docker 容器中运行 Python。

How to run Python inside Docker using Dockerfiles?

以下是在 Dockerfile 的帮助下在 Docker 中运行 Python 的逐步过程。

Step 1: Create a Dockerfile

从在项目目录中创建 Dockerfile 开始。Dockerfile 应包含要在基础 Python 镜像之上构建自定义 Docker 镜像的指令。下面是一个示例 Python Dockerfile。

# Use the official Python image as the base image
FROM python:3.9

# Set the working directory within the container
WORKDIR /app

# Copy the requirements.txt file into the container
COPY requirements.txt /app/

# Install Python dependencies listed in requirements.txt
RUN pip install -r requirements.txt

# Copy the rest of the application code into the container
COPY . /app

# Specify the command to run when the container starts
CMD ["python", "app.py"]

Step 2: Define Python Dependencies

如果你的 Python 应用程序依赖于外部依赖项,你可以创建一个 requirements.txt 文件。该文件应包含所有依赖项的列表,以及 Dockerfile 在构建映像时安装这些依赖项所用的版本。

Flask==2.1.0
requests==2.26.0

Step 3: Build the Docker Image

接下来,导航至终端中的 Dockerfile 位置,并运行以下 Docker 构建命令来构建 Python Docker 映像。

docker build -t my-python-app .
  1. -t my-python-app − -t 标志使用名称 my-python-app 标记 Docker 映像。

Step 4: Run the Docker Container

成功构建 Docker 映像后,你可以使用 Docker run 命令运行该映像的 Docker 容器。

docker run -d -p 5000:5000 my-python-app
  1. -d − 此标志分离容器并帮助你在后台运行它。

  2. -p 5000:5000 − -p 标志将主机上的 5000 端口映射到 Docker 容器内的 5000 端口。你可以根据要求调整端口号。

  3. my-python-app − 在这里,你必须指定要用于创建容器的 Docker 映像的名称。

Step 5: Access the Python Application

如果你的 Python 应用程序在 Web 服务器上运行,则需要打开 Web 浏览器并导航至 http://localhost:5000 以访问 Web 应用程序。

How to run Python using Docker Compose?

接下来,让我们了解如何使用 Docker Compose 来运行 Python。Docker Compose 帮助你使用单个 YAML 文件来简化多容器 Docker 应用程序管理。它使你可以编排服务和简化开发工作流,从而确保跨环境的一致性。

Step 1: Create Docker Compose Configuration

首先在项目目录中创建一个 docker-compose.yml 。在该文件中,你必须提及服务及其配置。

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  1. version: '3' − 指定 Docker Compose 文件格式的版本。

  2. services − 定义 Docker Compose 要运行的服务。

  3. web − 服务的名称。

  4. build: . − 指定服务的构建上下文,表明 Dockerfile 位于当前目录中。

  5. ports − 在主机和容器之间映射端口。

Step 2: Create a Dockerfile

接下来,在项目目录中创建一个 Dockerfile,其中包含构建 Docker 映像的说明。

FROM python:3.9
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app
CMD ["python", "app.py"]

Step 3: Define Python Dependencies

在 requirements.txt 文件中提及你的外部依赖项。

Flask==2.1.0
requests==2.26.0

Step 4: Build and Run with Docker Compose

下一步是使用 Docker Compose 构建和运行。导航到包含 docker-compose.yml 文件的目录。执行以下命令以构建和运行 Compose 文件中定义的服务 −

docker-compose up -d
  1. -d − 它允许你分离容器并在后台运行它们。

Step 5: Access the Python Application

通过打开 Web 浏览器并访问 http://localhost:5000 ,可以访问你的 Python 应用 Web 服务器。

Step 6: Stopping the Services

如果你想停止 docker-compose.yml 文件中定义的服务,可以运行以下命令 −

docker-compose down

此命令将帮助你停止并删除容器、其网络以及与服务关联的卷。

How to run Python in a virtual environment within the Docker?

接下来,如果你想在 Docker 内的虚拟环境中运行 Python,可以按照以下步骤操作。虚拟环境用于在项目中隔离 Python 依赖项。

Step 1: Create a Dockerfile

创建一个包含所有指令的 Dockerfile。

# Use the official Python image as the base image
FROM python:3.9

# Set the working directory within the container
WORKDIR /app

# Copy the requirements.txt file into the container
COPY requirements.txt /app/

# Create and activate a virtual environment
RUN python -m venv venv
RUN . venv/bin/activate && pip install -r requirements.txt

# Copy the rest of the application code into the container
COPY . /app

# Specify the command to run when the container starts
CMD ["python", "app.py"]

在此 Dockerfile 中,第一个 run 命令使用 Python 的内置 venv 模块在 Docker 容器中创建一个名为 venv 的虚拟环境。第二个 run 命令激活虚拟环境( venv )并使用 pip 安装 requirements.txt 文件中列出的 Python 依赖项。这会将依赖项与全局 Python 环境隔离。

Step 2: Define Python Dependencies

requirements.txt 文件中定义外部依赖项,列出所有必需软件包。

Flask==2.1.0
requests==2.26.0

Step 3: Build the Docker Image

导航到包含 Dockerfile 的项目目录,并在终端中执行以下命令来构建 Docker 镜像 −

docker build -t my-python-app .

Step 4: Run the Docker Container

现在你已成功构建 Docker 镜像,可以使用以下命令,基于该镜像运行一个 Docker 容器 −

docker run -d -p 5000:5000 my-python-app

通过打开 Web 浏览器并访问 http://localhost:5000 ,可以访问你的 Python Web 服务器。

Conclusion

在本章中,我们学习了如何在 Docker 容器中运行 Python。这使我们能够使用简化高效的方法来管理依赖项。无论通过 Dockerfile、Docker Compose 还是 Docker 容器内的虚拟环境,我们都可以将 Python 应用程序及其依赖项容器化。

Frequently Asked Questions

Q1. How to run Python tests in Docker?

你可以创建一个具有必需测试依赖项和指令的 Dockerfile,以便在 Docker 中运行 Python 测试。其中包括在 Docker 镜像中设置测试框架(例如 pytest 或 unittest)以及从容器的入口点或命令执行测试。

为了确保对代码进行的任何更改都会反映在容器中运行的测试中,你也可以使用卷将测试代码装载到 Docker 容器中。这会跨多个平台创建一个一致的测试环境。

Q2. How to use Python debugger in docker?

你可以设置 Dockerfile,在 Docker 容器中包含 Python 调试器软件包(例如 `pdb})和你的应用程序代码,以便使用 Python 调试器。然后,当容器正在运行时,你可以使用调试命令或断点在容器中启动调试器。

确保 Docker 容器已设置为进行交互式调试至关重要。通常,可以通过交互模式 (`docker run -it})运行容器并打开远程调试所需的端口来实现这一点(如果需要)。

Q3. How do I open a VSCode inside a docker container?

必须使用 VSCode 的“Remote - Containers”插件才能在 Docker 容器中启动 Visual Studio Code(VSCode)。安装扩展程序后,你可以通过在 VSCode 中打开项目文件夹并使用“Remote-Containers: Open Folder in Container”命令,创建 Docker 容器、启动该容器并将该容器附加到为项目设置的 Docker 容器上。

通过将 VSCode IDE 与 Docker 环境无缝集成,此操作可让你直接在容器中构建、调试和测试 Python 应用程序,同时还可以访问所有 VSCode 功能和扩展程序。

Q4. How to remote debug the Python docker container?

你可以设置 Dockerfile,以公开相关的调试端口(例如,5678,用于 PyCharm 远程调试)并包含任何必要的调试器软件包(例如 `pydevd}),以便对 Python Docker 容器进行远程调试。当 Docker 容器正在运行时,请确保主机已映射到公开的调试端口,以便调试器可以从外部 IDE 或调试器客户端进行连接。

此外,为在 Docker 容器中启用远程调试,请确保你的 Python 应用程序已在调试模式下启动并已设置为侦听传入的调试器连接。