如何在Docker容器中執行Python?



Python憑藉其簡潔性、豐富的庫和多功能性徹底改變了軟體開發行業。當專案規模擴大以及開發和部署環境的複雜性增加時,管理Python依賴項變得非常困難。因此,在確保執行時在多個環境中保持一致性方面出現了重大挑戰。這就是在Docker中執行Python發揮作用的地方。

Docker是一個領先的容器化平臺,它提供了一種簡化的方式來打包、分發和執行跨不同環境的應用程式。在Docker中執行Python有很多好處——它增強了可移植性、依賴項管理、隔離性和可擴充套件性。Docker將Python應用程式及其依賴項封裝在輕量級容器中,確保在開發、測試和生產環境中的一致行為。

在Docker容器內執行Python的主要方法是:

  • 使用Dockerfile和官方Python Docker基礎映象。
  • 利用Docker Compose定義和執行多容器Python Docker應用程式。
  • 在Docker容器內建立一個虛擬環境來隔離Python依賴項。

在本章中,我們將討論如何透過逐步方法、Docker命令和示例,使用不同的方法在Docker容器中執行Python。

如何使用Dockerfile在Docker中執行Python?

以下是使用Dockerfile在Docker中執行Python的逐步過程。

步驟1:建立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"]

步驟2:定義Python依賴項

如果你的Python應用程式依賴於外部依賴項,你可以建立一個requirements.txt檔案。此檔案應包含所有依賴項以及Dockerfile在構建映象時將使用的版本的列表。

Flask==2.1.0
requests==2.26.0

步驟3:構建Docker映象

接下來,導航到終端內的Dockerfile位置,並執行以下Docker build命令來構建Python Docker映象。

docker build -t my-python-app .
  • `-t my-python-app` − -t標誌使用名稱`my-python-app`標記Docker映象。

步驟4:執行Docker容器

成功構建Docker映象後,可以使用Docker run命令執行該映象的Docker容器。

docker run -d -p 5000:5000 my-python-app
  • `-d` − 此標誌分離容器並幫助你在後臺執行它。
  • `-p 5000:5000` − -p標誌將主機上的埠5000對映到Docker容器內的埠5000。你可以根據需要調整埠號。
  • `my-python-app` − 在這裡,你必須指定要用於建立容器的Docker映象的名稱。

步驟5:訪問Python應用程式

如果你的Python應用程式在Web伺服器上執行,你可以開啟Web瀏覽器並導航到`https://:5000`以訪問Web應用程式。

如何使用Docker Compose執行Python?

接下來,讓我們瞭解如何使用Docker Compose執行Python。Docker Compose幫助你使用單個YAML檔案簡化多容器Docker應用程式管理。它允許你編排服務並簡化開發工作流程,確保跨環境的一致性。

步驟1:建立Docker Compose配置

首先在專案目錄中建立一個docker-compose.yml檔案。在此檔案中,你必須提及服務及其配置。

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  • `version: '3'` − 指定Docker Compose檔案格式的版本。
  • `services` − 定義Docker Compose要執行的服務。
  • `web` − 服務的名稱。
  • `build: .` − 指定服務的構建上下文,表示Dockerfile位於當前目錄中。
  • `ports` − 對映主機和容器之間的埠。

步驟2:建立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"]

步驟3:定義Python依賴項

在requirements.txt檔案中提及你的外部依賴項。

Flask==2.1.0
requests==2.26.0

步驟4:使用Docker Compose構建和執行

下一步是使用Docker Compose構建和執行。導航到包含`docker-compose.yml`檔案的目錄。執行以下命令以構建和執行Compose檔案中定義的服務:

docker-compose up -d
  • `-d` − 它允許你分離容器並在後臺執行它們。

步驟5:訪問Python應用程式

你可以透過開啟Web瀏覽器並導航到`https://:5000`來訪問你的Python應用程式Web伺服器。

步驟6:停止服務

如果要停止`docker-compose.yml`檔案中定義的服務,可以執行以下命令:

docker-compose down

此命令將幫助你停止並刪除與服務關聯的容器、網路和卷。

如何在Docker中的虛擬環境中執行Python?

接下來,如果要在Docker中的虛擬環境中執行Python,可以按照以下步驟操作。虛擬環境用於隔離專案內的Python依賴項。

步驟1:建立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環境隔離。

步驟2:定義Python依賴項

在`requirements.txt`檔案中定義你的外部依賴項,其中列出了所有必需的包。

Flask==2.1.0
requests==2.26.0

步驟3:構建Docker映象

導航到終端中包含Dockerfile的專案目錄,並執行以下命令以構建Docker映象:

docker build -t my-python-app .

步驟4:執行Docker容器

現在你已經成功構建了Docker映象,可以使用以下命令執行基於該映象的Docker容器:

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

你可以透過開啟Web瀏覽器並導航到`https://:5000`來訪問你的Python Web伺服器。

結論

在本章中,我們學習瞭如何在Docker容器內執行Python。這使我們能夠以一種簡化且高效的方式來管理依賴項。無論是透過Dockerfile、Docker Compose還是Docker容器內的虛擬環境,我們都可以容器化Python應用程式及其依賴項。

常見問題

Q1. 如何在Docker中執行Python測試?

你可以建立一個Dockerfile,其中包含必要的測試依賴項和指令,以便在Docker中執行Python測試。這包括在Docker映象中設定測試框架,例如pytest或unittest,並從容器的入口點或命令執行測試。

為了保證對程式碼所做的任何更改都反映在容器內執行的測試中,你還可以使用卷將測試程式碼安裝到Docker容器內。這會在多個平臺上建立一致的測試環境。

Q2. 如何在docker中使用Python偵錯程式?

你可以設定Dockerfile以包含Python偵錯程式包(例如,`pdb`)以及你的應用程式程式碼,以便在Docker容器中使用Python偵錯程式。然後,當容器執行時,你可以使用除錯命令或斷點在容器內啟動偵錯程式。

確保你的Docker容器已設定為互動式除錯非常重要。通常,這是透過以互動模式執行容器(`docker run -it`)並在需要時開啟遠端除錯所需的埠來完成的。

Q3. 如何在docker容器內開啟VSCode?

必須使用VSCode的“遠端 - 容器”外掛才能在Docker容器內啟動Visual Studio Code (VSCode)。安裝擴充套件程式後,你可以在VSCode中開啟專案資料夾並使用“遠端 - 容器:在容器中開啟資料夾”命令來建立、啟動和連線到為你的專案設定的Docker容器。

這允許你直接在容器內構建、除錯和測試你的Python應用程式,並訪問所有VSCode功能和擴充套件。它透過將VSCode IDE無縫整合到Docker環境中來實現此目的。

Q4. 如何遠端除錯Python docker容器?

你可以設定Dockerfile以公開相關的除錯埠(例如,PyCharm遠端除錯的5678埠)幷包含任何必要的偵錯程式包(例如`pydevd`),以便遠端除錯Python Docker容器。確保在Docker容器執行時將主機對映到公開的除錯埠,以便偵錯程式可以從外部IDE或偵錯程式客戶端連線。

此外,為了在Docker容器內啟用遠端除錯,請確保你的Python應用程式在除錯模式下啟動並設定為偵聽傳入的偵錯程式連線。

廣告