ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で使用できます。
- Oracle Cloud Infrastructure資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了する場合は、これらの値をクラウド環境に固有の値に置き換えてください。
Podmanでのファイル作成の使用
イントロダクション
Docker Composeは、アプリケーションとして単一または複数のコンテナを組み立てて実行するために、特別にフォーマットされたYAMLファイルを入力として使用するコマンドライン・ツールです。これにより、開発者はアプリケーション用の単一のYAMLファイルを開発、テストおよびユーザーに配信でき、1つのコマンドのみを使用して起動および停止できます。この移植性と信頼性は、Docker Composeがユーザーと開発者の両方に大人気を博しているだけでなく、ますます要件を満たしています。
目的
この演習では、Podmanでpodman-compose
とdocker-compose
の両方をインストールして使用し、単純なdocker-compose.yaml
ファイルで動作することを確認します。
前提条件
- Oracle Linuxがインストールされているクライアントシステム
- Podmanがインストールされている(コンテナ・ツール・パッケージ)
- インターネットへのアクセス
Oracle Support免責事項
次の手順で説明する一連の手順については、Oracleでは技術サポートを提供していません。これらの手順では、Oracleが提供していないソフトウェアプログラムおよびオペレーティングシステムを参照しているからです。このチュートリアルでは、オプションの手順のみを便宜上提供しています。
Podmanベースのサービスの開発および使用に対してOracleでサポートされているメソッドの詳細は、https://docs.oracle.com/en/operating-systems/oracle-linux/podman/を参照してください。
演習環境の設定
ノート:無料の演習環境を使用する場合は、接続およびその他の使用手順についてOracle Linux Labの基本を参照してください。
-
まだ接続されていない場合は、端末を開き、sshを使用して ol-serverインスタンスに接続します。
ssh oracle@<ip_address_of_instance>
Podman Worksの確認
Oracle Linuxのcontainer-toolsパッケージは、Podman、Buildah、Skopeoおよび関連する依存関係の最新バージョンを提供します。
-
Podmanのバージョンを確認します。
podman -v
-
Podman CLIが動作していることを確認します。
podman run quay.io/podman/hello
出力例:
[oracle@ol-server ~]$ podman run quay.io/podman/hello Trying to pull quay.io/podman/hello:latest... Getting image source signatures Copying blob f82b04e85914 done Copying config dbd85e09a1 done Writing manifest to image destination Storing signatures !... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ Project: https://github.com/containers/podman Website: https://podman.io Documents: https://docs.podman.io Twitter: @Podman_io
構成ファイルを操作するためのPodmanの設定
Podmanは、Podman v3.0.0で限定的なサポートが導入された後、Podman v3.2.0でDocker Compose機能のサポートを導入し、Podman内からDocker Composeを使用する機能を導入しました。最近のPodman v4.1.0では、Docker Compose v2.2以降を使用できるように、Docker Compose機能のサポートが拡張されました。
次の手順では、podman-compose
と docker-compose
の両方をインストールおよび構成する方法について説明します。
Podman Dockerパッケージのインストール
これにより、PodmanはDockerコマンドでネイティブに作業できます。
-
podman-docker
パッケージをインストールします。sudo dnf install -y podman-docker
Docker Composeのインストール
ノート:
ここで説明するスタンドアロン方式でのComposeのインストールでは、
docker compose
のDockerユーティリティを使用する場合に使用される標準構文ではなく、docker-compose
を使用する必要があります。つまり、docker compose up
構文をかわりにdocker-compose up
に置き換えます。
-
Composeスタンドアロンをダウンロードしてインストールします。
sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
出力例:
[oracle@ol-server ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.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 42.8M 100 42.8M 0 0 158M 0 --:--:-- --:--:-- --:--:-- 158M
-
実行可能権限をバイナリに適用します。
sudo chmod +x /usr/local/bin/docker-compose
-
スタンドアロン作成の動作を確認します。
docker-compose version
出力例:
[oracle@ol-server ~]$ docker-compose version Docker Compose version v2.15.1
Podmanソケットの起動
Unixソケットを作成してDocker Compose機能を機能させるには、次のステップが必要です。
-
次の手順で Podmanソケットを構成します。
sudo systemctl enable --now podman.socket sudo systemctl status podman.socket
出力例:
[oracle@ol-server ~]$ sudo systemctl enable --now podman.socket Created symlink /etc/systemd/system/sockets.target.wants/podman.socket -> /usr/lib/systemd/system/podman.socket. [oracle@ol-server ~]$ sudo systemctl status podman.socket * podman.socket - Podman API Socket Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; vendor preset) Active: active (listening) since Thu 2023-01-19 20:58:20 GMT; 16s ago Docs: man:podman-system-service(1) Listen: /run/podman/podman.sock (Stream) CGroup: /system.slice/podman.socket Jan 19 20:58:20 ol-server systemd[1]: Listening on Podman API Socket.
-
curlを使用して、ソケットが期待どおりに動作することを確認します。
sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
出力例:
[oracle@ol-server ~]$ sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping OK [oracle@ol-server ~]$
このコマンドの出力でOK
が返された場合、作成機能はdocker-compose.yamlファイルを操作するように正常に構成されます。
Podman Composeのインストール
Podman Composeは、Podmanで実行するCompose Specificationを実装するPython 3ライブラリです。
-
Podman Composeをインストールする前に、pipが最新バージョンに更新されていることを確認します。
sudo -H pip3 install --upgrade pip
-
Podman Composeパッケージをインストールします。
sudo pip3 install podman-compose
pip3 install
をsudo
として実行する場合、WARNINGメッセージは無視できます。 -
Podman Composeの動作を確認します。
podman-compose version
出力例:
[oracle@ol-server ~]$ podman-compose version ['podman', '--version', ''] using podman version: 4.2.0 podman-composer version 1.0.3 podman --version podman version 4.2.0 exit code: 0
Docker構成ファイルの作成
このdocker-compose.yamlファイルを使用すると、指定されたアプリケーションのプルおよび起動が可能になります。
-
テスト用のディレクトリを作成します。
mkdir -p Documents/examples/echo
-
そのディレクトリに移動します。
cd Documents/examples/echo
-
docker-compose.yamlファイルを作成します。
cat >> docker-compose.yaml << EOF --- version: '3' services: web: image: k8s.gcr.io/echoserver:1.4 ports: - "${HOST_PORT:-8080}:8080" EOF
-
作成したdocker-compose.yamlを確認します。
cat docker-compose.yaml
出力例:
[oracle@ol-server echo]$ cat docker-compose.yaml --- version: '3' services: web: image: k8s.gcr.io/echoserver:1.4 ports: - "8080:8080"
Podman構成が動作していることを確認する
-
docker-composeファイルがあるディレクトリに移動します。
重要:
docker-compose.yaml
ファイルが配置されているディレクトリにいる場合を除き、podman-compose
コマンドは機能しません。cd ~/Documents/examples/echo/
-
echoserver
アプリケーションを起動します。podman-compose up -d
出力例:
[oracle@ol-server echo]$ podman-compose up -d ['podman', '--version', ''] using podman version: 4.2.0 ** excluding: set() ['podman', 'network', 'exists', 'echo_default'] ['podman', 'network', 'create', '--label', 'io.podman.compose.project=echo', '--label', 'com.docker.compose.project=echo', 'echo_default'] ['podman', 'network', 'exists', 'echo_default'] podman create --name=echo_web_1 --label io.podman.compose.config-hash=123 --label io.podman.compose.project=echo --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=echo --label com.docker.compose.project.working_dir=/home/oracle/examples/echo --label com.docker.compose.project.config_files=docker-compose.yaml --label com.docker.compose.container-number=1 --label com.docker.compose.service=web --net echo_default --network-alias web -p 8080:8080 k8s.gcr.io/echoserver:1.4 Trying to pull k8s.gcr.io/echoserver:1.4... Getting image source signatures Copying blob d3c51dabc842 done Copying blob a3ed95caeb02 done Copying blob 6d9e6e7d968b done Copying blob 412c0feed608 done Copying blob cd23f57692f8 done Copying blob dcd34d50d5ee done Copying blob a3ed95caeb02 skipped: already exists Copying blob a3ed95caeb02 skipped: already exists Copying blob a3ed95caeb02 skipped: already exists Copying blob b4241160ce0e done Copying blob 7abee76f69c0 done Writing manifest to image destination Storing signatures 1b54b75ca13786d33df6708da1d83ecce14b055e78b03007c3c4e1f441e7139c exit code: 0
ノート: Podmanと同様に、
docker-compose.yaml
ファイルで参照されるコンテナは、システムにまだ存在していない場合にのみプルされます。 -
echoserver
アプリケーションが稼働していることをテストします。curl -X POST -d "foobar" http://localhost:8080/; echo
出力例:
[oracle@ol-server echo]$ 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
出力例:
[oracle@ol-server echo]$ podman-compose logs ['podman', '--version', ''] using podman version: 4.2.0 podman logs echo_web_1 10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1" exit code: 0
-
Podman Composeユーティリティを使用して実行中のコンテナを確認します。
podman-compose ps
出力例:
[oracle@ol-server echo]$ 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作成ユーティリティ・コマンドを参照してください。ただし、これらの追加コマンドは、この演習では対象外です。 -
次に、echowebサービスを停止します。
podman-compose down
Docker Composeが機能していることを確認します
-
(オプション) docker-composeファイルが置かれているディレクトリに移動します。
重要:
docker-compose.yaml
ファイルが配置されているディレクトリにいる場合を除き、docker-compose
コマンドは機能しません。cd ~/Documents/examples/echo/
-
echoserver
アプリケーションを起動します。sudo /usr/local/bin/docker-compose up -d
出力例:
[oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose up -d [+] Running 0/0 [+] Running 0/1echo-web-1 Starting 0.0 [+] Running 0/1echo-web-1 Starting 0.1 [+] Running 0/1echo-web-1 Starting 0.2 [+] Running 0/1echo-web-1 Starting 0.3 [+] Running 0/1echo-web-1 Starting 0.4 [+] Running 0/1echo-web-1 Starting 0.5 [+] Running 0/1echo-web-1 Starting 0.6 [+] Running 0/1echo-web-1 Starting 0.7 [+] Running 1/1echo-web-1 Starting 0.8 ��� Container echo-web-1 Started 0.8s
ノート:
このコマンドの実行時に次の出力が返された場合:
��� Container echo-web-1 Starting 0.9s Error response from daemon: cannot listen on the TCP port: listen tcp4 :8080: bind: address already in use
心配しないでください。これは、
podman-compose down
コマンドが実行されず、以前にpodman-compose
を使用して起動されたechoserverコンテナがまだ実行中であることを意味します。前のステップに従って停止します。 -
コンテナが実行されていることをテストします。
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ユーティリティを使用してログを検査し、このアプリケーションによって成功したリクエストが返されたことを確認します。
sudo /usr/local/bin/docker-compose logs
出力例:
[oracle@ol-server echo]$ sudo /usr/local/bin/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ユーティリティでは、Composeファイルで起動されたコンテナを確認する方法も用意されています。
sudo /usr/local/bin/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
ノート:
docker-compose --help
を実行して、他のDocker Composeユーティリティ・コマンドを参照してください。ただし、これらの追加コマンドは、この演習では対象外です。 -
echowebサービスを停止します。
sudo /usr/local/bin/docker-compose down
出力例:
[oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose down [+] Running 0/0 [+] Running 0/1echo-web-1 Stopping 0.1 [+] Running 0/1echo-web-1 Stopping 0.2 [+] Running 0/1echo-web-1 Stopping 0.3 [+] Running 2/1echo-web-1 Removing 0.4 ��� Container echo-web-1 Removed 0.4s ��� Network echo_default Removed 0.0s
重要な情報
podman-compose
とdocker-compose
の両方の実行可能ファイルが同じシステムにインストールされている場合は、これらを同じ意味で起動できないことに注意してください。つまり、プロセスがpodman-docker
によって起動された場合、次の例に示すように、そのプロセスを問い合せたり、docker-compose
ユーティリティを使用して停止したり、またはその逆で停止することはできません。
-
作成ファイルがあるディレクトリに移動します。
重要:
docker-compose.yaml
ファイルが配置されているディレクトリにいる場合を除き、podman-compose
またはdocker-compose
コマンドは機能しません。cd ~/Documents/examples/echo/
-
まず、Podman Composeを使用します。
podman-compose up -d
-
Docker Composeを使用して実行中のコンテナをリストしてみてください。
sudo /usr/local/bin/docker-compose ps
出力例
[oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
-
ただし、Podman Composeを使用すると、コンテナが実行中であることが確認されます。
podman-compose ps
出力例:
[oracle@ol-server echo]$ 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でファイル作成を使用する方法が確認されます。
詳細情報
他の関連リソースを参照してください。
- Oracle Learning Library
- Oracle Linux ドキュメント:
その他の学習リソース
docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Using Compose Files with Podman
F76747-01
January 2023
Copyright © 2023, Oracle and/or its affiliates.