# 在 Container 內開發

在 docker container 內進行開發,好處是本機不用安裝開發必要的程式,比如說不用在本機安裝 Python 也可以開發、執行 Python 程式。

最簡單的執行方式

執行、進入 container
docker run --rm -it alpine

就可以啟動進入 container 開發,不過這樣子的開發方式都依賴 CLI。

# Remote Container

這邊介紹一個 VSCode 套件 Remote Containers。可以進入 container 內,使用 VSCode 進行開發。

Remote Containers

# Requirements

繼續之前,請先檢查自己的環境是不是符合需求

https://code.visualstudio.com/docs/remote/containers#_system-requirements

# Definition

準備完畢後,執行 VSCode 載入要開發用的資料夾,然後點選左下角綠色 "><" 圖示

><

點選 "Add Development Container Configuration Files…"

Add Development Container Configuration Files…

接著選取要建立的環境,如要開發使用資料庫的 Node.js 程式,就選 "Node.js & PostgreSQL",如果你畫面上看到的沒有像圖片那麼多個,點一下 "Show All Definitions…" 可以顯示全部,或者輸入關鍵字搜尋。

Dev Container List

選完主要開發的環境後,接著選取版本號。

如果你的電腦 CPU 是 arm64/Apple Silicon 的話(如 M1 CPU),請選 "bullseye" 的版本。

bullseye

是否要增加其他而外功能,如果沒有的話按 "確定" 繼續。

Select addition features

# Setting

會看到資料夾內多了 ".devcontainer" 資料夾,裡面還有 devcontainer.json、Dockerfile 兩個檔案。

.devcontainer

devcontainer.json 是設定檔,定義在 container 內時 VSCode 的設定。通常會改的有下面兩個區塊。

// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"dbaeumer.vscode-eslint"
],

另一個 Dockerfile 檔案,遠端連入開發的 container 就是由該檔案 build 而成。通常不需要更動,除非有要在 build 時安裝套件或者執行指令。

# Run

準備就緒後,再次點選左下角綠色「><」符號,選 "Reopen in Container"。

.Reopen in Container

會開始 build 啟動 container,右下角會跳出提示,點選提示可以看到執行過程。

build container

這是完成後的畫面,可以根據左下角綠色的狀態欄知道目前是不是在 container 內,如果顯示「><」表示在本機。原本在資料夾內的檔案在 container 內也可以看到,而且本機 /container 的檔案異動是同步的。

Ctrl+O (開啟檔案),可以選取要開啟在 container 內的檔案或是本機的檔案。

Open file

Ctrl+Shift+` 開啟新的終端機,可以在 container 內執行指令。

接著就可以在 container 內進行開發了。