ノート:

Podmanでのファイル作成の使用

イントロダクション

Docker Composeは、アプリケーションとして単一または複数のコンテナを組み立てて実行するために、特別にフォーマットされたYAMLファイルを入力として使用するコマンドライン・ツールです。これにより、開発者はアプリケーション用の単一のYAMLファイルを開発、テストおよびユーザーに配信でき、1つのコマンドのみを使用して起動および停止できます。この移植性と信頼性は、Docker Composeがユーザーと開発者の両方に大人気を博しているだけでなく、ますます要件を満たしています。

目的

この演習では、Podmanでpodman-composedocker-composeの両方をインストールして使用し、単純なdocker-compose.yamlファイルで動作することを確認します。

前提条件

Oracle Support免責事項

次の手順で説明する一連の手順については、Oracleでは技術サポートを提供していません。これらの手順では、Oracleが提供していないソフトウェアプログラムおよびオペレーティングシステムを参照しているからです。このチュートリアルでは、オプションの手順のみを便宜上提供しています。

Podmanベースのサービスの開発および使用に対してOracleでサポートされているメソッドの詳細は、https://docs.oracle.com/en/operating-systems/oracle-linux/podman/を参照してください。

演習環境の設定

ノート:無料の演習環境を使用する場合は、接続およびその他の使用手順についてOracle Linux Labの基本を参照してください。

  1. まだ接続されていない場合は、端末を開き、sshを使用して ol-serverインスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
    

Podman Worksの確認

Oracle Linuxのcontainer-toolsパッケージは、Podman、Buildah、Skopeoおよび関連する依存関係の最新バージョンを提供します。

  1. Podmanのバージョンを確認します。

    podman -v
    
  2. 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-composedocker-composeの両方をインストールおよび構成する方法について説明します。

Podman Dockerパッケージのインストール

これにより、PodmanはDockerコマンドでネイティブに作業できます。

  1. podman-dockerパッケージをインストールします。

    sudo dnf install -y podman-docker
    

Docker Composeのインストール

ノート:

ここで説明するスタンドアロン方式でのComposeのインストールでは、docker composeDockerユーティリティを使用する場合に使用される標準構文ではなく、docker-composeを使用する必要があります。つまり、docker compose up構文をかわりにdocker-compose upに置き換えます。

  1. 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
    
    
  2. 実行可能権限をバイナリに適用します。

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. スタンドアロン作成の動作を確認します。

    docker-compose version
    

    出力例:

    [oracle@ol-server ~]$ docker-compose version
    Docker Compose version v2.15.1
    
    

Podmanソケットの起動

Unixソケットを作成してDocker Compose機能を機能させるには、次のステップが必要です。

  1. 次の手順で 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.
    
  2. 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ライブラリです。

  1. Podman Composeをインストールする前に、pipが最新バージョンに更新されていることを確認します。

    sudo -H pip3 install --upgrade pip
    
  2. Podman Composeパッケージをインストールします。

    sudo pip3 install podman-compose 
    

    pip3 installsudoとして実行する場合、WARNINGメッセージは無視できます。

  3. 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ファイルを使用すると、指定されたアプリケーションのプルおよび起動が可能になります。

  1. テスト用のディレクトリを作成します。

    mkdir -p Documents/examples/echo
    
  2. そのディレクトリに移動します。

    cd Documents/examples/echo
    
  3. 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
    
  4. 作成した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構成が動作していることを確認する

  1. docker-composeファイルがあるディレクトリに移動します。

    重要: docker-compose.yamlファイルが配置されているディレクトリにいる場合を除き、podman-composeコマンドは機能しません

    cd ~/Documents/examples/echo/
    
  2. 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ファイルで参照されるコンテナは、システムにまだ存在していない場合にのみプルされます。

  3. 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
    
  4. さらに、ログをレビューして成功を確認します。

    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
    
    
  5. 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作成ユーティリティ・コマンドを参照してください。ただし、これらの追加コマンドは、この演習では対象外です。

  6. 次に、echowebサービスを停止します。

    podman-compose down
    

Docker Composeが機能していることを確認します

  1. (オプション) docker-composeファイルが置かれているディレクトリに移動します。

    重要: docker-compose.yamlファイルが配置されているディレクトリにいる場合を除き、docker-composeコマンドは機能しません

    cd ~/Documents/examples/echo/
    
  2. 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コンテナがまだ実行中であることを意味します。前のステップに従って停止します。

  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ユーティリティを使用してログを検査し、このアプリケーションによって成功したリクエストが返されたことを確認します。

    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"
    
    
  5. 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ユーティリティ・コマンドを参照してください。ただし、これらの追加コマンドは、この演習では対象外です。

  6. 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-composedocker-composeの両方の実行可能ファイルが同じシステムにインストールされている場合は、これらを同じ意味で起動できないことに注意してください。つまり、プロセスがpodman-dockerによって起動された場合、次の例に示すように、そのプロセスを問い合せたり、docker-composeユーティリティを使用して停止したり、またはその逆で停止することはできません。

  1. 作成ファイルがあるディレクトリに移動します。

    重要: docker-compose.yamlファイルが配置されているディレクトリにいる場合を除き、podman-composeまたはdocker-composeコマンドは機能しません

    cd ~/Documents/examples/echo/
    
  2. まず、Podman Composeを使用します。

    podman-compose up -d
    
  3. 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
    
  4. ただし、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でファイル作成を使用する方法が確認されます。

詳細情報

他の関連リソースを参照してください。

その他の学習リソース

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

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