ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で使用できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
Podmanを使用したOracle LinuxでのComposeファイルの使用
イントロダクション
PodmanとDocker Composeは、特別にフォーマットされたYAMLファイルを入力として使用し、単一または複数のコンテナをアプリケーションとしてアセンブルして実行するコマンドライン・ツールです。これらのツールを使用すると、開発者はアプリケーション用の単一のYAMLファイルを開発、テスト、ユーザーに提供し、1つのコマンドのみを使用して確実に起動および停止できます。この移植性と信頼性は、ユーザーや開発者に非常に人気があるコンポーズ仕様を使用しており、ますます要件となっています。
目的
このチュートリアルでは、次のことを学習します。
- Podmanで
podman-compose
とdocker-compose
の両方をインストールして使用します - 単純な
docker-compose.yaml
ファイルで動作することを確認します。
前提条件
-
単一のOracle Linuxシステムの最少数
-
各システムには、次を使用してOracle Linuxがインストールおよび構成されている必要があります。
- sudoアクセス権を持つroot以外のユーザー・アカウント
- インターネットへのアクセス
Oracle Linuxのデプロイ
ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、linux-virt-labs
GitHubプロジェクトREADME.mdを読み、前提条件を完了してください。
-
Lunaデスクトップでターミナルを開きます。
-
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
無料の演習環境には、ローカル・ホストで実行される再生の
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のインストール
-
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ユーティリティの実行時に使用される標準の
docker-compose up
構文ではなく、docker-compose up
を使用する必要があります。
Podmanソケットの起動
PodmanとDocker Composeはそれぞれ、Podmanソケットを起動する必要があります。これにより、各プログラムからのシステムコールがこのsystemd制御プロセスを介して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
から指定されたパスと一致します。このコマンドの出力は、docker-compose.yamlファイルを操作する準備ができた作成機能の正常な構成を示すOK
を返します。
Podman Composeのインストール
Podman Composeは、Podmanで実行するCompose Specificationを実装するPython 3ライブラリです。
-
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
構成ファイルの作成
この作成ファイルでは、指定されたアプリケーションのプルおよび起動が可能です。
-
テスト用のディレクトリを作成し、そのディレクトリに移動します。
mkdir -p projects/echo cd projects/echo
-
作成ファイルを作成します。
cat >> compose.yaml << EOF services: web: image: k8s.gcr.io/echoserver:1.4 ports: - "${HOST_PORT:-8080}:8080" EOF
-
作成ファイルを確認します。
cat compose.yaml
Podman Composeの実行
-
作成ファイルと同じディレクトリに移動します。
重要:
podman-compose
コマンドは、compose.yaml
ファイルと同じディレクトリにいる場合を除き、機能しません。cd ~/projects/echo/
-
echoserver
アプリケーションを起動します。podman-compose up -d
出力は、Podmanがコンテナをプルダウンし、Composeファイルにリストされているパラメータでコンテナを起動することを示しています。
-d
オプションは、コンテナをデタッチ・モードでバックグラウンドで実行するようにPodmanに指示します。Podmanは、イメージがローカルに存在しない場合にのみ、作成ファイルで参照されているイメージをプルします。 -
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バージョンを使用した``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
-
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 Composeが機能していることの確認
-
Podmanソケットの場所の環境変数を設定します。
export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
-
echoserverアプリケーションを起動します。
このコマンドは、作成ファイルと同じディレクトリ内から実行する必要があります。
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
出力例:
``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"
-
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でComposeファイルを使用する方法が確認されます。
関連リンク
その他の学習リソース
docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Use Compose Files with Podman on Oracle Linux
F76754-02