使用 Oracle Linux 上的 Podman 建置多平台容器映像檔
簡介
此示範說明使用 Podman 在 Oracle Linux 上建立多平台容器映像檔。
目標
在本教學課程中,您將瞭解如何:
- 設定 Podman 以進行遠端連線
- 連線至遠端 Podman 執行處理
- 從單一容器檔案建置平台特定映像檔
- 將平台特定映像檔推送至 Oracle Cloud Infrastructure Registry (OCIR)
- 建立包含平台特定映像檔的資訊清單
- 將資訊清單推送至 OCIR
- 檢查 OCIR 代管的清單清單,以查看可用的平台
- 提取並執行映像檔
必要條件
- 存取 Oracle Cloud Infrastructure (OCI) 租用戶
- Oracle Linux x86_64 執行處理
- Oracle Cloud Developer aarch_64 執行處理
- 存取 Oracle Cloud Infrastructure Registry
部署 Podman 伺服器
-
建立 Oracle Linux 運算執行處理。
如果資源配置使用 x86_64 架構,您便可以使用預設影像和資源配置。選取或建立公用子網路並指定 IPv4 位址。
此步驟支援使用永遠免費層提供的微型資源配置。
-
執行處理執行之後,請登入執行處理。
ssh -i <SSH_KEY> opc@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
其中:
<SSH_KEY>
是佈建運算執行處理時所使用 SSH 金鑰的私密部分。範例:~/.ssh/id_rsa
<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
是運算執行處理的公用 IP 位址。
安裝並設定遠端存取的 Podman
您可以將這些命令當作運算執行處理上的預設 opc
使用者帳戶,或是任何具有 sudo
存取權的使用者來執行。
-
以所有最新的安全性修正與勘誤表更新系統。
sudo dnf -y update
-
安裝 Podman 套裝程式或模組。
Oracle Linux 8:
sudo dnf module install -y container-tools:ol8
Oracle Linux 9 和 Oracle Linux 10:
sudo dnf install -y container-tools
容器工具模組或套件會安裝 Podman 及其他容器工具,包括 skopeo 和 buildah。其中一個基本套件是 container-selinux ,它允許在啟用 SELinux 的系統上以非 root 使用者身分執行
podman
,該系統預設會啟用 Oracle Linux。 -
啟用 Podman 通訊埠。
systemd 會監聽該通訊埠,並在遠端從屬端啟用 Podman 時啟動執行處理。連線關閉時,systemd 會關閉 Podman 執行處理。
注意:您可以在無 root 模式下設定遠端 Podman 存取,但超出本教學課程的範圍。
sudo systemctl enable --now podman.socket
-
驗證通訊端的路徑。
sudo systemctl status podman.socket
輸出顯示通訊端監聽,其位置位於
/run/podman/podman.sock
。這樣做,但稍後在此教學課程中繼續登入 Podman 伺服器執行處理,以執行 SSH 無密碼組態。
部署 Oracle Cloud Developer 執行處理
Oracle Ampere A1 Compute 是結合 Oracle Cloud Infrastructure (OCI) 和 Ampere Altra Arm 處理器的高效能平台。它提供確定的效能、經過實證的安全性,以及廣泛的開發人員生態系統,包括熱門工具和環境 (OS、Kubernetes - OKE、SDK 和 CLI)。
OCI 將 Oracle Cloud Developer Image 列為平台映像檔,其中已安裝所有熱門開發人員工具,包括 Git、Node.js、Java 和 GraalVM。
-
建立 Oracle Cloud Developer 運算執行處理。
選取 Oracle Cloud Developer 映像檔和 Ampere 資源配置。選取與 Podman 伺服器執行處理相同的公用子網路,然後指定 IPv4 位址。
-
決定使用傳入規則或 SSH 連接埠轉送。
您可以透過兩種方式存取將建立的示範 Web 應用程式。雖然您可以同時啟用兩者,但您只需要挑選其中一項。
(選擇性) 建立傳入規則
使用傳入規則是兩個步驟的程序。此選項會從網際網路開啟子網路的存取權,即使在重新啟動後,仍會繼續授予指定連接埠上執行處理的存取權。您必須先在 OCI 內建立規則,然後在 Oracle Linux 執行處理上開啟 firewalld 內的連接埠。
-
新增傳入規則至您的公用子網路。
此規則應允許來自
0.0.0.0/0
之連接埠5808/tcp
的輸入流量。規則會在建立後立即生效。 -
開啟新的終端機,並透過 SSH 連線至 Oracle Cloud Developer 執行處理。
ssh -i <SSH_KEY> opc@<IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>
-
新增示範 Web 應用程式的存取權。
sudo firewall-cmd --permanent --add-port=5808/tcp sudo firewall-cmd --reload
-
確認防火牆的變更。
sudo firewall-cmd --list-all
輸出顯示可用的
ports: 5808/tcp
。
使用 SSH 連接埠轉寄
-
開啟終端機,並透過 SSH 連線至 Oracle Cloud Developer 執行處理。
-L
選項會啟用本機轉寄,這會開啟本機連接埠,透過 SSH 通道連線至遠端示範 Web 應用程式。ssh -L 5808:localhost:5808 -i <SSH_KEY> opc@<IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>
建立 Web 應用程式的容器映像檔並在本機執行
-
複製示範應用程式的 Git 儲存區域。
在本教學課程中,您將部署 RasDash ,這是一個以 Node.js 為基礎的伺服器監控 Web 應用程式。
git clone https://github.com/sykeben/RasDash.git
-
變更至原始程式碼目錄。
cd ~/RasDash
-
建立一個 Containerfile ,以建立並為 Web 應用程式提供服務。
cat << EOF > Containerfile FROM ghcr.io/oracle/oraclelinux8-nodejs:14 COPY . /app WORKDIR /app RUN npm install && \ npm test CMD ["/usr/bin/node", "app.js", "service"] EOF
-
在本機執行處理上建置並執行映像檔。
使用
podman
在本機建置容器映像檔,並使用應用程式的版本和平台架構標記映像檔。將每個平台映像檔推送至 Oracle Cloud Infrastructure Registry (OCIR) 和建立兩個平台映像檔清單時,此資訊將有助於日後使用。sudo podman build --format docker --tag rasdash:0.3.4-arm64 .
最後一行對您的應用程式建置而言是唯一的。
-
使用映像檔執行容器。
sudo podman run --rm --init -detach --name rasdash --publish 5808:5808 localhost/rasdash:0.3.4-arm64
Podman 傳回的摘要對每個容器執行處理而言都是唯一的。
-
檢視執行中的容器。
sudo podman ps
輸出會將容器顯示為
Up
並執行中。 -
檢視容器日誌。
sudo podman logs rasdash
輸出會顯示
[STATE] Server started
。 -
檢視 Web 應用程式。
開啟本機機器上的瀏覽器,並瀏覽至
http://localhost:5808
。如果您建立了傳入規則和防火牆規則,則可以使用 Oracle Cloud Developer 執行處理的公用 IP 位址,而不是localhost
。注意: CPU 溫度測量結果會顯示
-1
,因為 OCI 中的虛擬執行處理無法存取實體硬體資料。 -
停止執行中的容器。
sudo podman stop rasdash
設定執行處理之間的無密碼 SSH
Podman 會基於安全考量,在執行處理之間使用 SSH 通訊。為了獲得更順暢的體驗,請在您的雲端開發人員執行處理上建立公開 / 私密金鑰組,然後將其複製到 Podman Remote 伺服器,如此一來,您就可以從開發人員執行處理進行 SSH,而不需要提示輸入密碼。
-
在 Oracle Cloud Developer 執行處理上產生公開 / 私密金鑰組。
ssh-keygen -b 4096 -f ~/.ssh/id_rsa -q -N ""
-
複製公鑰檔案的內容。
cat ~/.ssh/id_rsa.pub
從
cat
命令選取輸出並加以複製。 -
切換至 Podman 伺服器執行處理。
-
在 vi 中開啟檔案。
vi ~/.ssh/authorized_keys
將公開金鑰內容貼到授權的金鑰檔案中。
儲存並關閉檔案。
-
請確定將正確的檔案系統權限套用至 SSH 目錄和檔案。
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
-
切換至雲端開發人員執行處理。
-
測試您是否可以以
opc
使用者身分透過 SSH 連線 Podman 伺服器而不需要密碼。注意:如果您有任何問題,請參閱下列文件:
ssh opc@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
驗證您不需要密碼即可連線之後,請務必將 Oracle Cloud Developer 執行處理與 Podman 伺服器之間的 SSH 階段作業設為
exit
。 -
切換至 Podman 伺服器執行處理。
-
取代 root 使用者的授權金鑰檔案。
cat /home/opc/.ssh/authorized_keys | sudo tee /root/.ssh/authorized_keys
-
切換至雲端開發人員執行處理。
-
測試您是否可以與 Podman 伺服器上
root
使用者在雲端開發人員執行處理上的opc
使用者進行 SSH。ssh root@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
以 root 使用者身分成功測試與 Podman 伺服器的 SSH 連線之後,您可以
exit
階段作業。
建立 Podman 伺服器的系統連線
-
在您的 Podman 伺服器上執行的 Oracle Cloud Developer 執行處理與 Podman 服務之間建立 Podman 系統連線。
sudo podman system connection add --identity ~/.ssh/id_rsa amd64 ssh://root@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>/run/podman/podman.sock
在上面的命令中,請確定將
<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
取代為您 Podman 伺服器的 IP 位址或主機名稱。 -
請確認您已順利新增連線。
sudo podman system connection list
輸出會顯示
amd64
連線,其Default
值設為true
。如果系統已設定多個連線,Podman 會使用此連線。
在遠端 Podman 伺服器上建立映像檔
您現在應該可以使用 podman --remote
,將命令從 Oracle Cloud Developer 執行處理傳送至遠端 Podman 伺服器執行處理。
-
取得 Podman 伺服器的詳細資訊進行測試。
sudo podman --remote info
架構應報告為
arm64
。 -
建立遠端映像檔。
Podman 會自動將整個相關資訊環境複製到遠端執行處理。
cd ~/RasDash sudo podman --remote build --format docker --tag rasdash:0.3.4-amd64 .
-
確認遠端 Podman 伺服器上的映像檔存在。
附註: Podman 不會將它建立的影像複製回用戶端機器,因此如果您執行
sudo podman images
,將不會列出該影像。不過,它可以在遠端機器上使用。sudo podman --remote images
輸出範例:
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/rasdash 0.3.4-amd64 3a1b9755ebdd 8 seconds ago 439 MB ...
-
驗證本機映像檔架構。
驗證已為特定平台建立 (且在上) 每個影像的最終方法,架構使用
jq
擷取每個影像資訊清單中的Architecture
欄位值。sudo podman inspect rasdash:0.3.4-arm64 | jq -r '.[] | .Architecture'
本機影像會將其架構報告為
arm64
。 -
檢查遠端影像 。
sudo podman --remote inspect rasdash:0.3.4-amd64 | jq -r '.[] | .Architecture'
遠端影像會報告為
amd64
。
建立容器登錄儲存區域
在 Oracle Cloud Infrastructure 主控台中,瀏覽至容器登錄區段並建立儲存區域,以儲存您的多平台應用程式。
如需詳細資訊,請參閱 Oracle Cloud Infrastructure 文件中的建立儲存區域。
-
建立專用
demo/rasdash
儲存區域。 -
複查新儲存區域的詳細資訊。
收集容器登錄儲存區域證明資料
下表提供此教學課程中後續步驟所使用的範例值。iad
範例是美國東部 (阿什本) 區域的區域索引鍵。如果您的區域是德國中部 (法蘭克福),則區域索引鍵為 fra
。如需列出可用區域金鑰的完整表格,請參閱區域和可用性網域文件。
登錄資料 | 教學課程預留位置 | 備註 |
---|---|---|
REGISTRY_NAMESPACE | gse00015915 |
在儲存區域資訊面板中顯示為「命名空間」 |
REPOSITORY_NAME | demo/rasdash |
以區間名稱顯示 |
OCIR_INSTANCE | iad.ocir.io |
使用 <region>.ocir.io |
如有需要,請參閱使用 Docker CLI 植入影像。此程序說明使用 CLI 將影像推送至容器登錄所需的登入程序。
-
取得您的使用者名稱。
您必須要有使用者名稱和認證權杖,才能登入容器登錄。若要取得使用者名稱,請在 Oracle Cloud Infrastructure 主控台的右上角,開啟設定檔功能表 (使用者功能表圖示),然後按一下我的設定檔以檢視詳細資訊。
複製並儲存使用者名稱,包括主控台中顯示的
tenancy-namespace
。 -
產生認證權杖。
向下捲動主控台中的我的設定檔頁面,然後在資源底下選取 Auth Tokens 。
選取產生記號按鈕,然後為新記號提供
demo
的描述。產生權杖之後,請務必複製並儲存該權杖。
登入容器登錄儲存區域
下表提供此教學課程中後續步驟所使用的範例值。
使用者名稱 | 教學課程預留位置 |
---|---|
REGISTRY_NAMESPACE | gse00015915 |
使用者名稱 | luna.user@e1ab5742-7e30-463a-9017-0b48fa54197e |
東京語 | ]y#W_iS9GKC}4l1Gq9Fn |
OCIR_INSTANCE | iad.ocir.io |
-
建立要在
podman login
命令中使用的環境變數。使用您的使用者名稱和記號建立
USER
和TOKEN
環境變數。請確定在使用者名稱中包含<REGISTRY_NAMESPACE>
。export OCIR_INSTANCE="iad.ocir.io" export OCIR_NAMESPACE="gse00015915" export OCI_USERNAME="luna.user@e1ab5742-7e30-463a-9017-0b48fa54197e" export OCIR_USERNAME="$OCIR_NAMESPACE/$OCI_USERNAME" export OCI_USER_TOKEN="]y#W_iS9GKC}4l1Gq9Fn"
-
登入容器登錄。
sudo -E podman login -u $OCIR_USERNAME -p $OCIR_USER_TOKEN $OCIR_INSTANCE
遠端執行處理會自動繼承從屬端執行處理的認證證明資料。
推送平台影像
在此範例中,具有平台特定標記的最終儲存庫 URI 為:
docker://iad.ocir.io/gse00015915/demo/rasdash:0.3.4-arm64
docker://iad.ocir.io/gse00015915/demo/rasdash:0.3.4-amd64
Podman 可以將本機影像推送至遠端登錄,而不需要事先標記影像。
-
推送本機
rasdash/0.3.4-arm64
影像。sudo -E podman push rasdash:0.3.4-arm64 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-arm64
-
推送遠端
rasdash:0.3.4-amd64
影像。sudo -E podman --remote push rasdash:0.3.4-amd64 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-amd64
-
檢查容器登錄主控台。
注意:推送遠端影像不會產生本機輸出。請複查
rasdash:0.3.4-amd64
標記的容器登錄主控台,以檢查您是否已順利推送影像。您應該會在容器登錄主控台中看到兩個影像。
0.3.4-amd64
影像:0.3.4-arm64
影像:
建立與發送資訊清單至容器登錄
現在您有兩個平台映像檔,可以建立清單清單,讓容器程式實際執行為其平台選取適當的映像檔 (即作業系統與架構的組合)。
由於大多數容器映像檔都是以 Linux 為基礎,因此使用者通常會將多平台映像檔視為多重存檔映像檔。不過,也可以將可在 Windows、macOS 和 Linux 上執行的映像檔結合成單一清單。
-
建立並植入資訊清單。
只使用標記中的應用程式版本,在雲端開發人員執行處理上建立本機資訊清單。
sudo podman manifest create rasdash:0.3.4
與之前一樣,總和檢查輸出對您所建立的清單而言是唯一的,而且與上述清單不符。
-
檢查資訊清單,以顯示目前使用的
mediaType
及其成員影像。sudo podman manifest inspect rasdash:0.3.4
-
將兩個平台特定的映像檔新增至清單中。
sudo -E podman manifest add rasdash:0.3.4 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-arm64
sudo -E podman manifest add rasdash:0.3.4 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-amd64
-
檢查安裝資訊清單。
sudo podman manifest inspect rasdash:0.3.4
新增影像之後,輸出就更有趣。
為達到最高相容性,您需將
--format docker
參數新增至每個建置命令,此命令指示 Podman 使用 Docker 影像資訊清單 V2、綱要 2 (v2s2
) 規格建立影像,而非預設 Podman 將使用的開啟容器初步計畫影像資訊清單規格。因為清單使用
v2s2
規格,所以 Podman 使用關聯的v2s2
清單規格,而非 Open Container Initiative Image Index Specification 。雲端管理 Kubernetes 服務 (包括 Oracle Engine for Kubernetes (OKE) 和內部部署自行代管 Kubernetes 發行套件) 使用的預設容器執行時期,與這兩個規格相容。
-
將資訊清單清單推送至容器登錄。
現在您已建立清單清單,可以將清單推送至儲存平台特定影像的相同容器登錄儲存庫。
sudo -E podman manifest push --all rasdash:0.3.4 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4
此動作是快速操作,因為您先前已將平台特定的影像推送。容器登錄只會連結資訊清單清單至現有影像。
-
在本機建立並執行影像。
您現在可以使用資訊清單標記 (而非平台特定標記) 在本機和遠端執行映像檔執行處理。
sudo -E podman run --rm --detach --init --publish 5808:5808 $OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4
-
從遠端建立並執行影像。
sudo -E podman --remote run --rm --detach --init --publish 5808:5808 $OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4
使用瀏覽器測試影像
假設您已在執行處理上建立必要的傳入規則和防火牆規則。在此情況下,您應該能夠開啟瀏覽器並瀏覽至 http://<PUBLIC_IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>:5808
和 http://<PUBLIC_IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>:5808
,以開啟在每個執行處理上執行的 RasDash Web 應用程式。
否則,便可以像之前一樣,使用 SSH 連接埠轉送,從本機機器建立兩個通道。
-
開啟 Oracle Cloud Developer 執行處理的 SSH 通道。
ssh -L 5808:localhost:5808 -i <SSH_KEY> opc@<IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>
開啟本機機器上的瀏覽器,然後瀏覽至
http://localhost:5808
,即可在 Cloud Development 執行處理上檢視 arm64 型 Web 應用程式。 -
結束 SSH 通道階段作業。
-
開啟 Podman 伺服器執行處理的 SSH 通道。
ssh -L 5808:localhost:5808 -i <SSH_KEY> opc@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
重新整理本機機器上指向
http://localhost:5808
的瀏覽器,以檢視 Podman Server 執行處理上以 amd64 為基礎的 Web 應用程式。
接下來的步驟
完成本教學課程之後,您應該知道如何建立可以從專用和公用 OCIR 儲存區域部署的映像檔。您可以在各種位置使用這些映像檔,例如 Oracle Engine for Kubernetes (OKE) 或 Oracle Cloud Native Environment。將映像檔部署到 Oracle Cloud Infrastructure 外部的主機 (包括 Mac 或 Windows 版 Podman Desktop) 時,您應該確定儲存區域是公開的。
相關連結
其他學習資源
在 docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Build Multi-Platform Container Images Using Podman on Oracle Linux
F49997-04