附註:

在 Oracle Linux 上搭配 Podman 使用撰寫檔案

簡介

Podman 和 Docker Compose 都是命令行工具,使用特殊格式的 YAML 檔案作為輸入來組合,然後以應用程式形式執行單一或多個容器。這些工具可讓開發人員針對其應用程式開發、測試及傳遞單一 YAML 檔案給使用者,並且只使用一個命令來可靠地啟動和停止該檔案。此可攜性與可靠性已使用 Compose 規格,對使用者與開發人員相當熱門,且逐漸成為需求。

目標

在本教學課程中,您將學習到:

必要條件

部署 Oracle Linux

注意:如果是在您自己的租用戶中執行,請先閱讀 linux-virt-labs GitHub 專案 README.md 並完成先決條件,再部署實驗環境環境。

  1. 在 Luna Desktop 上開啟終端機。

  2. 複製 linux-virt-labs GitHub 專案。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 變更至工作目錄。

    cd linux-virt-labs/ol
    
  4. 安裝必要的集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 部署實驗環境環境。

    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 編寫

  1. 獨立下載和安裝 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
    
  2. 在二進位檔套用執行檔權限 。

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 確認撰寫獨立工作。

    docker-compose version
    

    輸出會傳回目前版本的 docker-compose

    備註:如此處所述的以獨立方式安裝撰寫需要使用 docker-compose up,例如,執行 Docker 公用程式時使用的標準 docker-compose up 語法,而非標準語法。

啟動 Podman Socket

Podman 和 Docker Compose 皆需要啟動 Podman 通訊埠,此通訊埠可讓每個程式的系統呼叫透過此系統控制的程序與 Podman 通訊。

  1. 設定 Podman 通訊埠。

    systemctl --user enable --now podman.socket
    systemctl --user status podman.socket
    

    輸出顯示 systemd 通訊埠 active (listening)

  2. 取得使用者之 Podman 通訊埠位置的位置。

    podman info | grep -i remotesocket -A2
    
  3. 確認通訊端使用 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 一起執行。

  1. 安裝並啟用 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
    
  2. 安裝 Podman Compose 套件。

    sudo dnf install -y podman-compose 
    
  3. 確認 Podman Compose 的運作方式是顯示其版本。

    podman-compose version
    

建立編寫檔案

此 Compose 檔案允許提取和啟動指定的應用程式。

  1. 為測試建立目錄,然後變更為該目錄。

    mkdir -p projects/echo
    cd projects/echo
    
  2. 建立 Compose 檔案。

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. 複查撰寫檔案。

    cat compose.yaml
    

執行 Podman 撰寫

  1. 變更為與 Compose 檔案相同的目錄。

    重要事項:除非您位於與 compose.yaml 檔案相同的目錄中,否則 podman-compose 指令無法運作。

    cd ~/projects/echo/
    
  2. 啟動 echoserver 應用程式。

    podman-compose up -d
    

    輸出顯示 Podman 會下拉容器,並使用 Compose 檔案中列出的參數啟動容器。-d 選項會告知 Podman 在分離模式的背景中執行容器。Podman 只會提取 Compose 檔案中參照的影像 (如果它們不在本機上)。

  3. 測試 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
    
  4. 此外,請複查日誌以確認成功。

    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

  5. 使用 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 公用程式命令。

  6. 現在是停止 echoserver 容器的時候了。

    podman-compose down
    
  7. 移除容器部署期間建立的額外 Podman 橋接器網路。

    podman network rm echo_default
    

確認 Docker 編寫工作中

  1. 設定 Podman 通訊埠位置的環境變數。

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. 啟動 echoserver 應用程式。

    此命令必須從與 Compose 檔案相同的目錄中執行。

    docker-compose up -d
    

    輸出顯示建立 echo_default 網路與 echo-web-1 容器。

  3. 存取容器的應用程式。

    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
    
  4. 檢查日誌,並確認此應用程式已順利提交退貨要求。

    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"

  5. 開始使用 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
    
  6. 停止 echoserver 應用程式。

    docker-compose down
    

重要資訊

如果您在同一個系統上同時安裝 podman-compose docker-compose 執行檔,則必須注意,無法交替呼叫這些執行檔。此敘述句所代表的是,如果您使用 podman-compose 啟動處理作業,就無法使用 docker-compose 來查詢或停止該處理作業,反之亦然。

  1. 開始使用 Podman Compose。

    podman-compose up -d
    
  2. 嘗試使用 Docker Compose 列出執行中的容器。

    docker-compose ps
    

    輸出會傳回空白清單,顯示從其內容中沒有執行中的容器。

  3. 不過,使用 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-composedocker-compose 與 Podman 搭配使用撰寫檔案。

其他學習資源

docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center