ノート:

Podmanを使用したOracle LinuxでのComposeファイルの使用

イントロダクション

PodmanとDocker Composeは、特別にフォーマットされたYAMLファイルを入力として使用し、単一または複数のコンテナをアプリケーションとしてアセンブルして実行するコマンドライン・ツールです。これらのツールを使用すると、開発者はアプリケーション用の単一のYAMLファイルを開発、テスト、ユーザーに提供し、1つのコマンドのみを使用して確実に起動および停止できます。この移植性と信頼性は、ユーザーや開発者に非常に人気があるコンポーズ仕様を使用しており、ますます要件となっています。

目的

このチュートリアルでは、次のことを学習します。

前提条件

Oracle Linuxのデプロイ

ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、linux-virt-labs GitHubプロジェクトREADME.mdを読み、前提条件を完了してください。

  1. Lunaデスクトップでターミナルを開きます。

  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
    

    無料の演習環境には、ローカル・ホストで実行される再生のansible_python_interpreterを設定する追加の変数local_python_interpreterが必要です。この変数は、python3.6モジュールの下にあるOracle Cloud Infrastructure SDK for PythonのRPMパッケージが環境によってインストールされるため必要です。

    デフォルトのデプロイメント・シェイプでは、AMD CPUおよびOracle Linux 8が使用されます。Intel CPUまたはOracle Linux 9を使用するには、デプロイメント・コマンドに-e instance_shape="VM.Standard3.Flex"または-e os_version="9"を追加します。

    重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階では、Oracle Linuxのインストールが完了し、インスタンスの準備ができました。前回の再生をノートにとります。この再生では、デプロイするノードのパブリックIPアドレスとプライベート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のインストール

  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ユーティリティの実行時に使用される標準のdocker-compose up構文ではなく、docker-compose upを使用する必要があります。

Podmanソケットの起動

PodmanとDocker Composeはそれぞれ、Podmanソケットを起動する必要があります。これにより、各プログラムからのシステムコールがこのsystemd制御プロセスを介して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から指定されたパスと一致します。このコマンドの出力は、docker-compose.yamlファイルを操作する準備ができた作成機能の正常な構成を示すOKを返します。

Podman Composeのインストール

Podman Composeは、Podmanで実行するCompose Specificationを実装するPython 3ライブラリです。

  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
    

構成ファイルの作成

この作成ファイルでは、指定されたアプリケーションのプルおよび起動が可能です。

  1. テスト用のディレクトリを作成し、そのディレクトリに移動します。

    mkdir -p projects/echo
    cd projects/echo
    
  2. 作成ファイルを作成します。

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. 作成ファイルを確認します。

    cat compose.yaml
    

Podman Composeの実行

  1. 作成ファイルと同じディレクトリに移動します。

    重要: podman-composeコマンドは、compose.yamlファイルと同じディレクトリにいる場合を除き、機能しません

    cd ~/projects/echo/
    
  2. echoserverアプリケーションを起動します。

    podman-compose up -d
    

    出力は、Podmanがコンテナをプルダウンし、Composeファイルにリストされているパラメータでコンテナを起動することを示しています。-dオプションは、コンテナをデタッチ・モードでバックグラウンドで実行するようにPodmanに指示します。Podmanは、イメージがローカルに存在しない場合にのみ、作成ファイルで参照されているイメージをプルします。

  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バージョンを使用した``text ['podman'、 '–version'、 '']: 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 Composeが機能していることの確認

  1. Podmanソケットの場所の環境変数を設定します。

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. echoserverアプリケーションを起動します。

    このコマンドは、作成ファイルと同じディレクトリ内から実行する必要があります。

    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
    

    出力例:

    ``text echo-web-1 | 10.89.0.1 - - [2023年1月17日: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-composeまたはdocker-composeを使用してPodmanでComposeファイルを使用する方法が確認されます。

その他の学習リソース

docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。