用 Docker 打造 Visual Studio Code Python 開發環境:快速安裝到佈署攻略!

在實際使用上,我們通常會先拉取有人佈署好的 Docker Hub images ,例如資料庫相關的 MySQL或是佈署我們需要使用的程式環境 ,在抓取好 image 之後,我們可能會需要放在自己的本地主機環境進行操作,所以會執行 image ,接著 image 就會轉為動態的 container ,最後有需要持續進行資料同步功能,就可以在轉移至 Volumes 進行設定。

下載Docker Desktop並安裝

我們可以從官方網站先下載 Docker Desktop

如果你是 windows電腦,可以選擇 Windows-AMD64的選項,並把它安裝起來。

Docker的基本組成

在佈署 docker之前,有幾個需要花點時間理解幾個基本的物件:

Image (映像檔)

image 是一個包含應用程式及其所有依賴的靜態文件系統模板,這是 Docker 容器的基礎。

可以從 Docker Hub 等公共儲存庫拉取映像檔,或根據需要創建自定義的映像檔。

從 Docker Hub 拉取現成的 Image: pull image,假設想要拉取 python 的官方映像檔:

docker pull python:3.9

檢查本機所有已下載的Docker image

docker images

Container (容器)

容器是運行中的映像檔(image)實例,當你從 Image 創建容器並啟動它時,容器會成為一個可運行的環境。

運行容器:當你拉取了一個映像檔(例如 python:3.9),你可以使用以下命令來運行容器:

docker run -it --name my-python-container python:3.9

這將創建並啟動名為 my-python-container 的容器,並進入交互式的 shell。

啟動一個後台運行的容器:如果你希望容器在後台運行而不進入交互模式,使用 -d 參數:

docker run -d --name my-python-container python:3.9

查看所有正在運行的容器:使用 docker ps 查看所有運行中的容器:

docker ps

停止容器:如果容器正在運行,你可以使用 docker stop 停止容器:

docker stop my-python-container

刪除容器:停止容器後,你可以刪除它:

docker rm my-python-container

進入容器 : 如果你希望進入已經運行的容器,可以使用 docker exec

docker exec -it my-python-container /bin/bash

Volumes (資料卷)

volumes 是用來持久化和共享資料用的,它可以將容器中的資料保存到本機,這樣容器重啟或刪除時資料不會丟失。

一般來說容器內的資料存儲通常是臨時的,使用 Volume 可以實現資料的持久性。

創建 Volume:

docker volume create my-volume

掛載 Volume 到容器:當運行容器時,你可以使用 v 參數將本機資料夾或 Volume 掛載到容器中:

docker run -d -v my-volume:/app/data --name my-python-container python:3.9

這會將容器內的 /app/data 目錄掛載到名為 my-volume 的 Volume。

查看 Volume:查看所有的 Volumes:

docker volume ls

刪除 Volume:如果不再需要某個 Volume,你可以使用以下命令刪除它:

docker volume rm my-volume

使用本機資料夾作為 Volume :

還可以將本機資料夾掛載為 Volume,例如將本機的 C:/data 資料夾掛載到容器內的 /app/data

docker run -d -v C:/data:/app/data --name my-python-container python:3.9

這樣,本機的 C:/data 資料夾會與容器內的 /app/data 目錄進行同步。

在Visiual Studio Code上使用Docker進行Python的環境開發

使用Python Container需要進行安裝的程式:

我們在進行佈署之前,我們會需要同時安裝好一些程式:

  1. Visiual Studio Code(VSCode)
  2. Docker Desktop
  3. VSCode 還有在延伸模組(Extensions)的地方,搜尋並安裝PythonDockerDev Containers

1. 在Docker上拉取Python官方映像檔

拉取(Pull)Image

docker pull python:3.9

啟動 Container

  • 使用 image 啟動一個 container:
docker run -it --name my-python-env python:3.9
  • it:讓你能進入 container 互動。
  • -name:給 container 取個名字(像「my-python-env」)。

進入 container 後,你就可以像在自己電腦上使用 Python!

2. 建立 .devcontainer 資料夾中建立 devcontainer.json

假設你現在的專案資料夾是(C:/docker-python-test),我們建立一個名為 .devcontainer 的資料夾,並在其中創建一個 devcontainer.json 配置檔。

這樣 VSCode 就會知道如何設定和連接 Docker 容器。

步驟如下:

  • 開啟你的專案資料夾:
    • 假設你的專案資料夾在 C:/docker-python-test,你可以直接在檔案總管中打開這個資料夾。
  • 創建 .devcontainer 資料夾:
    • C:/docker-python-test 資料夾中,右鍵點擊,選擇新建資料夾,並將其命名為 .devcontainer
  • 創建 devcontainer.json 檔案:
    • 進入 .devcontainer 資料夾後,右鍵點擊選擇新建文字檔案。
    • 將新建的文字檔案命名為 devcontainer.json,注意要把副檔名改為 .json,而不是 .txt
  • 編輯 devcontainer.json
    • 使用任意文字編輯器(例如 VSCode、Notepad++)打開 devcontainer.json 檔案,並寫入以下內容:
{
  "name": "Python Dev Environment",
  "build": {
    "dockerfile": "../Dockerfile",
    "context": ".."
  },
  "settings": {
    "python.defaultInterpreterPath": "/usr/local/bin/python"
  },
  "extensions": [
    "ms-python.python",
    "ms-azuretools.vscode-docker",
    "ms-vscode-remote.remote-containers"
  ],
  "workspaceFolder": "/app",
  "postCreateCommand": "pip install -r requirements.txt",
  "forwardPorts": [8888]
}
  • 內容說明:
    • "dockerFile": "../Dockerfile":這表示 devcontainer.json 會使用上層目錄中的 Dockerfile
    • "context": "..":這指定容器的上下文目錄,即容器將使用父目錄中的檔案。
    • "appPort": [8888]:這將開放端口 8888,以便你可以從瀏覽器訪問 Jupyter。
    • "postCreateCommand":在容器創建後安裝必要的 Python 依賴。
  • 檢查資料夾結構: 最終你的專案資料夾結構應該像這樣:
C:/docker-python-test
├── .devcontainer
│   └── devcontainer.json
├── Dockerfile
├── requirements.txt
└── test.py

3. Dockerfile

Dockerfile 是用來定義如何構建 Docker 映像檔的文件。

它包含一系列指令,每個指令告訴 Docker 如何設置映像檔環境,例如基礎映像、需要的依賴、工作目錄等。

以下是範例 Dockerfile,用於構建一個 Python 開發環境:

# 使用 Python 3.9 作為基礎映像
FROM python:3.9

# 設置工作目錄(容器中的目錄)
WORKDIR /app

# 複製 requirements.txt 進入容器
COPY requirements.txt /app/

# 安裝所有依賴項
RUN pip install --no-cache-dir -r requirements.txt

# 複製本機目錄下所有檔案到容器的 /app
COPY . /app

# 設定容器啟動後執行的命令
CMD ["python"]

4. requirements.txt

requirements.txt 是 Python 的依賴包清單文件,用於記錄你程式中需要的所有第三方庫。Docker 可以根據它來自動安裝這些依賴。

範例:requirements.txt 的內容

假設你需要使用 NumPy 和 Pandas,requirements.txt 可以這樣寫:

numpy==1.23.5
pandas==1.5.3
jupyter==1.0.0

5. 配置 VSCode 使用 Docker 容器中的 Python

5-1:打開 VSCode 專案

確保你已經打開專案的根目錄(如 C:/docker-python-test)。

5-2:啟用 Remote – Containers

  1. 點擊左下角綠色圖示(Remote Explorer)。
  2. 選擇 Reopen in Container
  3. 容器會根據 devcontainer.json 自動構建並啟動。

5-3:設定 Python 解釋器

  1. 點擊 VSCode 右下角的 Python 解釋器選擇器。
  2. 確保選擇的是容器中的 Python,例如 /usr/local/bin/python

5-4:運行 Python 腳本

  • 方法 1:終端運行
    • 打開 VSCode 的整合終端,執行:
python test.py
  • 方法 2:使用 VSCode Debugger
    • 建立 launch.json 並設定:
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal"
    }
  ]
}

5-5:測試成功後確認同步

確認 /app 資料夾與本機資料夾同步,確保你修改的程式會即時更新到容器內。

討論

以上是我自己在嘗試進行docker+VS Code的環境開發與佈署方式,另外其他的資源可以參考

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *