Linux中國

使用 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.jsonDockerfile。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.ioAnsible 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...