如何在Docker容器中運行Python?

各位有志於Python開發的朋友們,大家好!我很興奮能成為你們進入Docker與Python世界的引路人。作為一個教學多年的計算機科學老師,我可以告訴你們,將這兩種強大的技術結合起來,對於你們的開發工作流程來說可能會是一個遊戲規則的變革。那麼,讓我們一起來探討如何在Docker容器中運行Python吧!

Docker Setting - Python

Docker是什麼,為什麼你應該關心?

在我們深入細節之前,讓我們花一分鐘來了解Docker是什麼,以及它為什麼如此重要。想像你正在烘烤一個蛋糕。你有一個配方(你的代碼)、原料(你的依賴)和廚房工具(你的開發環境)。現在,如果你能將所有這些東西打包起來帶走,豈不是很棒?這正是Docker為你的Python專案所做的!

Docker讓你可以創建、部署和運行應用程序在容器中。這些容器是輕量級、可移植且一致的環境,可以在任何安裝了Docker的機器上運行。這意味著你可以和那個讓人討厭的“但在我的機器上可以運行”的問題說再見!

現在,讓我們動手學習如何在Docker容器中運行Python。

如何使用Dockerfile在Docker內運行Python?

Dockerfile就像是你的Docker容器的配方。它包含了一組Docker用來構建镜像的指示,這個镜像然後用來創建容器。讓我們為一個Python應用程序創建一個簡單的Dockerfile:

# 使用官方的Python運行時作為基礎镜像
FROM python:3.9-slim

# 設置容器內的工作目錄
WORKDIR /app

# 將當前目錄內容複製到容器內的/app
COPY . /app

# 安裝requirements.txt中指定的任何需要的包
RUN pip install --no-cache-dir -r requirements.txt

# 將端口80對外開放
EXPOSE 80

# 定義環境變量
ENV NAME World

# 容器啟動時運行app.py
CMD ["python", "app.py"]

讓我們來分解這個文件:

  1. FROM python:3.9-slim:告訴Docker使用官方的Python 3.9镜像作為基礎。
  2. WORKDIR /app:設置容器內的工作目錄。
  3. COPY . /app:將我們的當前目錄(包括Python腳本)複製到容器中。
  4. RUN pip install --no-cache-dir -r requirements.txt:安裝我們需要的Python包。
  5. EXPOSE 80:在容器外部開放端口80。
  6. ENV NAME World:設置一個環境變量。
  7. CMD ["python", "app.py"]:指定容器啟動時要運行的命令。

現在,讓我們創建一個簡單的app.py文件:

import os
name = os.environ.get('NAME', "World")
print(f"Hello, {name}!")

要構建和運行這個Docker容器,使用以下命令:

docker build -t my-python-app .
docker run my-python-app

然後,你就會在終端看到打印出"Hello, World!"。

如何使用Docker Compose運行Python?

Docker Compose就像是你Docker樂團的指揮家。它讓你可以定義和運行多容器Docker應用程序。讓我們為我們的Python應用程序創建一個docker-compose.yml文件:

version: '3'
services:
web:
build: .
ports:
- "5000:80"
volumes:
- .:/app
environment:
- NAME=Docker Compose

這個文件告訴Docker Compose:

  1. 使用我們的Dockerfile來構建镜像。
  2. 將主機上的端口5000映射到容器上的端口80。
  3. 將我們的當前目錄挂載到容器內的/app
  4. 設置環境變量NAME為"Docker Compose"。

要運行這個應用程序,只需使用以下命令:

docker-compose up

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

在Docker容器內運行Python的虛擬環境可能看起來有些過度,但在某些情況下它可能會很有用。讓我們修改我們的Dockerfile以包含一個虛擬環境:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .

RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

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

這個Dockerfile在/opt/venv中創建了一個虛擬環境,激活它,然後安裝我們的需求。

結論

恭喜你!你剛剛學會了如何使用Dockerfiles、Docker Compose甚至虛擬環境在Docker容器中運行Python。這是一個非常有力的技能,將會在你們的Python開發旅程中為你提供良好的服務。

記住,Docker關乎的是一致性和可移植性。它讓你可以將你的Python應用程序和所有依賴打包在一起,並在任何安裝了Docker的地方運行。這可以大大簡化部署和協作過程。

在我們結束時,這裡是一個總結我們學到的關鍵Docker命令的表格:

命令 描述
docker build -t <image-name> . 構建一個Docker镜像
docker run <image-name> 運行一個Docker容器
docker-compose up 開始在docker-compose.yml中定義的服務
docker-compose down 停止並移除容器、網絡、镜像和卷

繼續練習,繼續探索,最重要的是,繼續在Python和Docker中享受樂趣!記住,每一個大師都曾經是一個初學者。你的旅程才剛開始,我迫不及待想看到你將會創造出什麼驚人的事物。快樂編程!

Credits: Image by storyset