使用 VS Code 在容器中開發
當你有多個不同開發環境的開發人員在一個項目上工作時,編碼和測試的不一致性是一種風險。Visual Studio Code(VS Code)是一個集成開發環境(IDE),可以幫助減少這些問題。它可以和容器結合起來,為每個應用程序提供獨立的開發環境,同時提供一個一致的開發環境。
VS Code 的 「Remote - Containers」 擴展 使你能夠創建一個容器定義,使用該定義來構建一個容器,並在容器內進行開發。這個容器定義可以和應用程序代碼一起被簽入到源代碼庫中,這使得所有的開發人員可以使用相同的定義在容器中進行構建和開發。
默認情況下,「Remote - Containers」 擴展使用 Docker 來構建和運行容器,但使用 Podman 的容器運行環境環境也很容易,它可以讓你使用 免 root 容器。
本文將帶領你完成設置,通過 Podman 在免 root 容器內使用 VS Code 和 「Remote - Containers」 擴展進行開發。
初始配置
在繼續之前,請確保你的紅帽企業 Linux(RHEL)或 Fedora 工作站已經更新了最新的補丁,並且安裝了 VS Code 和 「Remote - Containers」 擴展。(參見 VS Code 網站了解更多安裝信息)
接下來,用一個簡單的 dnf install
命令來安裝 Podman 和它的支持包:
$ sudo dnf install -y podman
安裝完 Podman 後,配置 VS Code 以使用 Podman 的可執行文件(而不是 Docker)與容器進行交互。在 VS Code 中,導航到 「文件 > 首選項 > 設置」,點擊 「擴展」 旁邊的 「>」 圖標。在出現的下拉菜單中,選擇 「Remote - Containers」,並向下滾動找到 「Remote - Containers: Docker Path」 選項。在文本框中,用 「podman」 替換 「docker」。
![在文本框中輸入 「podman」](/data/attachment/album/202108/22/090353vvo7p5w8rp0rmuru.png "Enter "podman" in the text box")
現在配置已經完成,在 VS Code 中為該項目創建一個新的文件夾或打開現有的文件夾。
定義容器
本教程以創建 Python 3 開發的容器為例。
「Remote - Containers」 擴展可以在項目文件夾中添加必要的基本配置文件。要添加這些文件,通過在鍵盤上輸入 Ctrl+Shift+P
打開命令面板,搜索 「Remote-Containers: Add Development Container Configuration Files」,並選擇它。
![Remote-Containers: Add Development Container Configuration Files](/data/attachment/album/202108/22/090353p6bbnwb4swzutx9k.png "Remote-Containers: Add Development Container Configuration Files")
在接下來的彈出窗口中,定義你想設置的開發環境的類型。對於這個例子的配置,搜索 「Python 3」 定義並選擇它。
![選擇 Python 3 定義](/data/attachment/album/202108/22/090354bzaj4k49jjnxsky1.png "Select Python 3 definition")
接下來,選擇將在容器中使用的 Python 的版本。選擇 「3 (default)」 選項以使用最新的版本。
![選擇 「3 (default)」 選項](/data/attachment/album/202108/22/090354tbjpglgf68fffbf8.png "Select the 3 (default) option")
Python 配置也可以安裝 Node.js,但在這個例子中,取消勾選 「Install Node.js」,然後點擊 「OK」。
![取消勾選 「Install Node.js"](/data/attachment/album/202108/22/090354kf3nfbpo9fnnp7nc.png "Uncheck "Install Node.js"")
它將創建一個 .devcontainer
文件夾,包含文件devcontainer.json
和Dockerfile
。VS Code 會自動打開devcontainer.json
文件,這樣你就可以對它進行自定義。
啟用免 root 容器
除了明顯的安全優勢外,以免 root 方式運行容器的另一個原因是,在項目文件夾中創建的所有文件將由容器外的正確用戶 ID(UID)擁有。要將開發容器作為免 root 容器運行,請修改 devcontainer.json
文件,在它的末尾添加以下幾行:
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
"workspaceFolder": "/workspace",
"runArgs": ["--userns=keep-id"],
"containerUser": "vscode"
這些選項告訴 VS Code 用適當的 SELinux 上下文掛載工作區,創建一個用戶命名空間,將你的 UID 和 GID 原樣映射到容器內,並在容器內使用 vscode
作為你的用戶名。devcontainer.json
文件應該是這樣的(別忘了行末的逗號,如圖所示):
![更新後的 devcontainer.json 文件](/data/attachment/album/202108/22/090355oy456mfx06kik6zi.png "Updated devcontainer.json file")
現在你已經設置好了容器的配置,你可以構建容器並打開裡面的工作空間。重新打開命令調板(用 Ctrl+Shift+P
),並搜索 「Remote-Containers: Rebuild and Reopen in Container」。點擊它,VS Code 將開始構建容器。現在是休息一下的好時機(拿上你最喜歡的飲料),因為構建容器可能需要幾分鐘時間:
![構建容器](/data/attachment/album/202108/22/090355lt2p1t8jbet14sje.png "Building the container")
一旦容器構建完成,項目將在容器內打開。在容器內創建或編輯的文件將反映在容器外的文件系統中,並對這些文件應用適當的用戶許可權。現在,你可以在容器內進行開發了。VS Code 甚至可以把你的 SSH 密鑰和 Git 配置帶入容器中,這樣提交代碼就會像在容器外編輯時那樣工作。
接下來的步驟
現在你已經完成了基本的設置和配置,你可以進一步加強配置的實用性。比如說:
- 修改 Dockerfile 以安裝額外的軟體(例如,所需的 Python 模塊)。
- 使用一個定製的容器鏡像。例如,如果你正在進行 Ansible 開發,你可以使用 Quay.io 的 Ansible Toolset。(確保通過 Dockerfile 將
vscode
用戶添加到容器鏡像中) - 將
.devcontainer
目錄下的文件提交到源代碼庫,以便其他開發者可以利用容器的定義進行開發工作。
在容器內開發有助於防止不同項目之間的衝突,因為隔離了不同項目的依賴關係及代碼。你可以使用 Podman 在免 root 環境下運行容器,從而提高安全性。通過結合 VS Code、「Remote - Containers」 擴展和 Podman,你可以輕鬆地為多個開發人員建立一個一致的環境,減少設置時間,並以安全的方式減少開發環境的差異帶來的錯誤。
via: https://opensource.com/article/21/7/vs-code-remote-containers-podman
作者:Brant Evans 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive