附註:
- 本教學課程適用於 Oracle 提供的免費實驗室環境。
- 其使用 Oracle Cloud Infrastructure 證明資料、租用戶以及區間的範例值。完成實驗室時,請將這些值替代為雲端環境特定的值。
在 Oracle Linux 上搭配 Podman 使用撰寫檔案
簡介
Podman 和 Docker Compose 都是命令行工具,使用特殊格式的 YAML 檔案作為輸入來組合,然後以應用程式形式執行單一或多個容器。這些工具可讓開發人員針對其應用程式開發、測試及傳遞單一 YAML 檔案給使用者,並且只使用一個命令來可靠地啟動和停止該檔案。此可攜性與可靠性已使用 Compose 規格,對使用者與開發人員相當熱門,且逐漸成為需求。
目標
在本教學課程中,您將學習到:
- 在 Podman 安裝並使用
podman-compose
和docker-compose
- 驗證是否使用簡單的
docker-compose.yaml
檔案
必要條件
-
最低單一 Oracle Linux 系統
-
每個系統都應安裝並設定 Oracle Linux,其中包含:
- 具有 sudo 存取權的非 root 使用者帳戶
- 存取 Internet。
部署 Oracle Linux
注意:如果是在您自己的租用戶中執行,請先閱讀 linux-virt-labs
GitHub 專案 README.md 並完成先決條件,再部署實驗環境環境。
-
在 Luna Desktop 上開啟終端機。
-
複製
linux-virt-labs
GitHub 專案。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
變更至工作目錄。
cd linux-virt-labs/ol
-
安裝必要的集合。
ansible-galaxy collection install -r requirements.yml
-
部署實驗環境環境。
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e update_all=true
自由實驗環境環境需要額外的變數
local_python_interpreter
,此變數會設定在 localhost 上執行的播放ansible_python_interpreter
。由於環境會安裝 Oracle Cloud Infrastructure SDK for Python 的 RPM 套件 (位於 python3.6 模組底下),因此需要此變數。預設部署資源配置使用 AMD CPU 和 Oracle Linux 8。若要使用 Intel CPU 或 Oracle Linux 9,請在部署命令中新增
-e instance_shape="VM.Standard3.Flex"
或-e os_version="9"
。重要事項: 請等待播放手冊順利執行,然後到達暫停工作。在手冊的這個階段,Oracle Linux 的安裝已完成,實例已就緒。記下先前的播放,此播放會列印其部署節點的公用和專用 IP 位址,以及執行實驗室時所需的任何其他部署資訊。
設定 Podman 以使用撰寫檔案
Podman introduced support for Docker Compose functionality in Podman v3.2.0, after limited support was introduced in Podman v3.0.0, thereby introducing the ability to use Docker Compose from within Podman.最近有 Podman v4.1.0 擴展了對 Docker Compose 功能的支援,包括使用 Docker Compose v2.2 和更新版本。
安裝 Podman Docker 套裝程式
安裝 podman-docker
套裝軟體,讓 Podman 可以使用 Docker 指令原生作業。
sudo dnf install -y podman-docker
安裝 Docker 編寫
-
獨立下載和安裝 Compose。
sudo curl -SL https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
輸出範例:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 60.1M 100 60.1M 0 0 103M 0 --:--:-- --:--:-- --:--:-- 378M
-
在二進位檔套用執行檔權限 。
sudo chmod +x /usr/local/bin/docker-compose
-
確認撰寫獨立工作。
docker-compose version
輸出會傳回目前版本的
docker-compose
。備註:如此處所述的以獨立方式安裝撰寫需要使用
docker-compose up
,例如,執行 Docker 公用程式時使用的標準docker-compose up
語法,而非標準語法。
啟動 Podman Socket
Podman 和 Docker Compose 皆需要啟動 Podman 通訊埠,此通訊埠可讓每個程式的系統呼叫透過此系統控制的程序與 Podman 通訊。
-
設定 Podman 通訊埠。
systemctl --user enable --now podman.socket systemctl --user status podman.socket
輸出顯示 systemd 通訊埠
active (listening)
。 -
取得使用者之 Podman 通訊埠位置的位置。
podman info | grep -i remotesocket -A2
-
確認通訊端使用 cURL 運作。
curl -w "\n" -H "Content-Type: application/json" --unix-socket /run/user/$UID/podman/podman.sock http://localhost/_ping
--unix-socket
的路徑與podman info
提供的路徑相符。此命令的輸出應傳回OK
,表示已準備好使用 docker-compose.yaml 檔案的「撰寫」功能組態成功。
安裝 Podman Compose
Podman Compose 是一個 Python 3 程式庫,可實作撰寫規格以與 Podman 一起執行。
-
安裝並啟用 developer_EPEL 儲存庫。
Oracle Linux 8:
sudo dnf install -y oracle-epel-release-el8 sudo dnf config-manager --enable ol8_developer_EPEL
Oracle Linux 9:
sudo dnf install -y oracle-epel-release-el9 sudo dnf config-manager --enable ol9_developer_EPEL
Oracle Linux 10:
sudo dnf install -y oracle-epel-release-el10 sudo dnf config-manager --enable ol10_u0_developer_EPEL
-
安裝 Podman Compose 套件。
sudo dnf install -y podman-compose
-
確認 Podman Compose 的運作方式是顯示其版本。
podman-compose version
建立編寫檔案
此 Compose 檔案允許提取和啟動指定的應用程式。
-
為測試建立目錄,然後變更為該目錄。
mkdir -p projects/echo cd projects/echo
-
建立 Compose 檔案。
cat >> compose.yaml << EOF services: web: image: k8s.gcr.io/echoserver:1.4 ports: - "${HOST_PORT:-8080}:8080" EOF
-
複查撰寫檔案。
cat compose.yaml
執行 Podman 撰寫
-
變更為與 Compose 檔案相同的目錄。
重要事項:除非您位於與
compose.yaml
檔案相同的目錄中,否則podman-compose
指令無法運作。cd ~/projects/echo/
-
啟動
echoserver
應用程式。podman-compose up -d
輸出顯示 Podman 會下拉容器,並使用 Compose 檔案中列出的參數啟動容器。
-d
選項會告知 Podman 在分離模式的背景中執行容器。Podman 只會提取 Compose 檔案中參照的影像 (如果它們不在本機上)。 -
測試 echoserver 應用程式已啟動並在執行中。
curl -X POST -d "foobar" http://localhost:8080/; echo
輸出範例:
CLIENT VALUES: client_address=10.89.0.2 command=POST real path=/ query=nil request_version=1.1 request_uri=http://localhost:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* content-length=6 content-type=application/x-www-form-urlencoded host=localhost:8080 user-agent=curl/7.61.1 BODY: foobar
-
此外,請複查日誌以確認成功。
podman-compose logs
輸出範例:
``` 文字 ['podman',「– version」,''] 使用 podman 版本:4.2.0 podman 記錄檔 echo_web_1 10.89.0.2 - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1" 結束碼:0
-
使用 Podman Compose 公用程式查看執行中的容器。
podman-compose ps
輸出範例:
['podman', '--version', ''] using podman version: 4.2.0 podman ps -a --filter label=io.podman.compose.project=echo CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f4053947c8c1 k8s.gcr.io/echoserver:1.4 nginx -g daemon o... 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->8080/tcp echo_web_1 exit code: 0
您可以執行
podman-compose --help
來查看其他 Podman Compose 公用程式命令。 -
現在是停止 echoserver 容器的時候了。
podman-compose down
-
移除容器部署期間建立的額外 Podman 橋接器網路。
podman network rm echo_default
確認 Docker 編寫工作中
-
設定 Podman 通訊埠位置的環境變數。
export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
-
啟動 echoserver 應用程式。
此命令必須從與 Compose 檔案相同的目錄中執行。
docker-compose up -d
輸出顯示建立 echo_default 網路與 echo-web-1 容器。
-
存取容器的應用程式。
curl -X POST -d "foobar" http://localhost:8080/; echo
輸出範例:
[oracle@ol-server ~]$ curl -X POST -d "foobar" http://localhost:8080/; echo CLIENT VALUES: client_address=10.89.0.2 command=POST real path=/ query=nil request_version=1.1 request_uri=http://localhost:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* content-length=6 content-type=application/x-www-form-urlencoded host=localhost:8080 user-agent=curl/7.61.1 BODY: foobar
-
檢查日誌,並確認此應用程式已順利提交退貨要求。
docker-compose logs
輸出範例:
``` 文字 echo-web-1 | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
-
開始使用 Docker Compose 公用程式,取得容器清單。
docker-compose ps
輸出範例:
echo-web-1 k8s.gcr.io/echoserver:1.4 "nginx -g daemon off;" web 12 minutes ago Up 12 minutes 8080/tcp
-
停止 echoserver 應用程式。
docker-compose down
重要資訊
如果您在同一個系統上同時安裝 podman-compose
和 docker-compose
執行檔,則必須注意,無法交替呼叫這些執行檔。此敘述句所代表的是,如果您使用 podman-compose
啟動處理作業,就無法使用 docker-compose
來查詢或停止該處理作業,反之亦然。
-
開始使用 Podman Compose。
podman-compose up -d
-
嘗試使用 Docker Compose 列出執行中的容器。
docker-compose ps
輸出會傳回空白清單,顯示從其內容中沒有執行中的容器。
-
不過,使用 Podman Compose 會確認容器正在執行中。
podman-compose ps
輸出範例:
['podman', '--version', ''] using podman version: 4.2.0 podman ps -a --filter label=io.podman.compose.project=echo CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 55335e797296 k8s.gcr.io/echoserver:1.4 nginx -g daemon o... 4 minutes ago Up 4 minutes ago 0.0.0.0:8080->8080/tcp echo_web_1 exit code: 0
接下來的步驟
這會確認如何使用 podman-compose
或 docker-compose
與 Podman 搭配使用撰寫檔案。
相關連結
其他學習資源
在 docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。