ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で使用できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
Oracle Linux Automation Engineを使用したPodmanコンテナの構成
イントロダクション
Oracle Linux Automation Engineを使用すると、ユーザーはPodmanをインストールするためのプレイブックを作成し、containers.podmanコレクションを使用してコンテナを実行および管理できます。
プレイブックを実行する場合、Oracle Linux Automation Engineは、プレイブックのhosts:
ディレクティブに一致するマシンでタスクを実行します。これらのホストは通常、インベントリ・ファイルで定義され、リモートまたはローカルのいずれかになります。このチュートリアルでは、プレイブックをローカルで実行する方法を説明します。
目的
このチュートリアルでは、次のことを学習します。
- プレイブックをローカルで実行
- プレイブックへのコレクションの追加
- Podmanのインストール
- oraclelinux:9コンテナのプルおよび実行
前提条件
-
次の構成を持つOracle Linuxシステム:
- sudoアクセス権を持つroot以外のユーザー
- Oracle Linux Automation Engineのインストール
Oracle Linux Automation Engineのデプロイ
ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、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/olam
-
必要なコレクションをインストールします。
ansible-galaxy collection install -r requirements.yml
-
Oracle Linuxインスタンス構成を更新します。
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" olam_type: olae EOF
-
インベントリファイルを作成します。
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
演習環境をデプロイします。
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
無料のラボ環境では、Oracle Cloud Infrastructure SDK for Python用のRPMパッケージをインストールするため、localhostに追加変数
ansible_python_interpreter
が必要です。このパッケージをインストールする場所は、使用しているOracle Linuxのバージョンに基づくシステムのデフォルトのPythonモジュールの下にあります。インベントリ変数を使用すると、localhost以外のホストで実行されている再生に影響を与えません。デフォルトのデプロイメント・シェイプでは、AMD CPUが使用されます。コマンドラインで新しいシェイプ変数定義を渡すことで、インスタンスのシェイプを変更できます。
たとえば:
-e instance_shape="VM.Standard3.Flex"
同様に、Oracle Linuxイメージのデフォルト・バージョンでは、default_vars.ymlファイルに定義されている変数
os_version
が使用されます。この値は、コマンドラインでOracle Linuxメジャー・バージョンを渡すことによって変更できます。たとえば:
-e os_version="9"
重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階では、Oracle Linuxのインストールが完了し、インスタンスの準備ができました。前回の再生は、デプロイするノードのパブリックIPアドレスとプライベートIPアドレスを出力します。
コレクション
コレクションは、プレイブック、ロール、モジュールおよびプラグインを含むOracle Linux Automation Engineコンテンツの配布形式です。このチュートリアルでは、requirements.yml
ファイルを使用してcontainers.podman
コレクションをインストールします。requirements.yml
ファイルを使用すると、ファイル内で定義されたキーに基づいて、コレクション、ロールまたはその両方をインストールできます。
要件ファイルの作成
-
新しい端末を開き、SSH経由でol-control-nodeシステムに接続します。
ssh oracle@<ip_address_of_instance>
-
作業ディレクトリを作成します。
mkdir -p ~/podman-project
-
要件ファイルを作成します。
cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null --- collections: - name: containers.podman EOF
-
コレクションをインストールします。
ansible-galaxy collection install -r ~/podman-project/requirements.yml
出力は、Galaxyサイトから圧縮アーカイブ・ファイルを取得して、
.ansible/collections.
の下のホーム・ディレクトリにインストールするプロセスを示しています。ノート:出力に
ERROR: Ansible requires the locale encoding to be UTF-8; Detected None.
が表示されている場合、これはansible
のロケール設定が正しくないことを示します。この問題を修正するには、次の2つの環境変数を設定します。export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Podmanのインストール
Oracle Linux Automation Engineプレイブックは、特定のホストにマップされたタスクで構成される再生で構成されます。これらのタスクは、主にべき等モジュールを実行します。冪等性により、プレイブックを1回実行するか複数回実行するかに関係なく、同じ結果が得られます。このチュートリアルでは、プレイブックを段階的に構築し、各変更の間に実行することで、冪等性を示します。
Podmanコンテナを実行する前に、PodmanパッケージをOracle LinuxのAppStreamリポジトリからインストールする必要があります。
-
playbookファイルを作成します。
cat << 'EOF' | tee ~/podman-project/podman-playbook.yml > /dev/null --- - hosts: localhost connection: local tasks: - name: Install podman ansible.builtin.dnf: name: '@container-tools:ol8' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '8' - name: Install podman ansible.builtin.dnf: name: 'container-tools' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '9' EOF
プレイブックとタスクの名前は、プレイブックを自己文書化することを目的としています。次の情報では、いくつかの重要な項目について詳しく説明します。
hosts: localhost
: localhostに対して実行するようにタスクに指示します。connection: local
: リンクがローカルのままであり、SSHを介して実行されないようにします。become: yes
: このプレイブック・セクション内のタスクを、デフォルトでsudo
権限で実行するように昇格します。
-
プレイブックを実行します。
このプレイブックをローカルホストに対して実行するため、インベントリファイルを明示的に作成または参照する理由はありません。ただし、リモート・ホストに対してこれを実行する場合は、
hosts:
エントリを更新し、プレイブック内のconnection:
行を削除してから、インベントリ・ファイルを作成して参照する必要があります。このプロセスに慣れていない場合は、このチュートリアルの最後にあるOracle Linuxトレーニング・ステーションにリンクされている他のチュートリアルを参照できます。ansible-playbook ~/podman-project/podman-playbook.yml
このコマンドの出力には、localhostに対して正常に実行され、podmanのインストール・タスクの変更が報告されていることが示されます。このステータスは、container-toolsモジュールのインストールが適切に完了したことを示します。
-
バージョンを表示して、インストールされているPodmanパッケージを確認します。
podman --version
イメージのプル
Podmanをインストールすると、選択したレジストリからイメージをプルし、ローカルにステージングできます。このステップでは、GitHubコンテナ・レジストリからOracle Linuxイメージをプルします。
Oracle Linux Developerイメージに関する追加情報は、ここから入手できます。
-
プレイブックにコンテナ・イメージをプルするタスクを追加します。
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Pull oraclelinux:9 from GitHub containers.podman.podman_image: name: ghcr.io/oracle/oraclelinux:9 EOF
-
プレイブックを実行します。
ansible-playbook ~/podman-project/podman-playbook.yml
-
Podmanがイメージをプルしたことを確認します。
podman images
出力例:
REPOSITORY TAG IMAGE ID CREATED SIZE ghcr.io/oracle/oraclelinux 9 97e22ab49eea 20 hours ago 254 MB
コンテナ・イメージの実行
イメージをプルするだけでなく、イメージに基づいてコンテナを1つのステップでプルおよび実行することもできます。Oracle Linux NGINX開発者イメージをプルして実行します。
-
Playbookファイルを更新します。
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Run image containers.podman.podman_container: name: nginx image: ghcr.io/oracle/oraclelinux9-nginx:1.20 state: started detach: yes expose: - '80' - '443' publish: - '8080:80' EOF
説明:
name
: コンテナの名前。image
: コンテナの作成に使用されるリポジトリ・パス(またはイメージ名)およびタグ。state
: 名前と構成に一致する実行中のコンテナをチェックします。Podmanは、一致が見つからない場合に新しいコンテナを作成して起動します。detach
: コンテナをデタッチ・モードで実行します。expose
: ポートまたはポート範囲を公開します。publish
: コンテナの港またはポートの範囲をホストに公開します。
-
プレイブックを実行します。
ansible-playbook ~/podman-project/podman-playbook.yml
-
コンテナが実行中であることを確認します。
podman ps
出力例:
[oracle@ol-server podman-project]$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f7a28cc4c6b ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp nginx
出力には、コンテナが2分間稼働していることが示されます。
-
コンテナを停止します。
前述の出力のCONTAINER IDを使用して、次を実行します:
podman stop $(podman ps -q -f name=nginx)
このコマンドは、nginxコンテナを停止するための参照として CONTAINER IDを使用します。
ボリュームを使用したコンテナ・イメージの実行
Podmanは、コンテナ内のディレクトリにローカル・ディレクトリをマップするバインド・マウントを追加してボリュームを作成します。この機能をデモンストレーションするには、同じNGINXコンテナを実行し、デフォルトのindex.htmlページをカスタム・コンテナに置き換えます。
-
Playbookファイルを更新します。
ローカル・ディレクトリを作成します。コマンドラインからこのステップを効率的かつ手動で1回実行できますが、かわりに自動化しましょう。このステップを自動化すると、プレイブックが実行されるたびにディレクトリが存在することが保証されます。イメージを実行する前に、ディレクトリおよびindex.htmlファイルを作成するこれらのタスクを追加します。
読みやすくするためにタスク間に空白行を残し、YAML構文ルールおよび整列のガイドラインに従ってください。
sed
を使用すると、テキストのブロックを特定の行のファイルに簡単に挿入できるため、このタスクを完了できます。sed -i -e '24 r '<(cat -<< EOF - name: Ensure the destination directory exists ansible.builtin.file: path: "/home/oracle/nginx/" state: directory - name: Create an empty file ansible.builtin.file: path: "/home/oracle/nginx/index.html" state: touch mode: '0755' - name: Create index.html ansible.builtin.copy: dest: "/home/oracle/nginx/index.html" content: | Hello! Welcome to Oracle Linux Containers. EOF ) ~/podman-project/podman-playbook.yml
-
次に、
Run image
タスクの最後に次のオプションを追加します。cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null volume: "/home/oracle/nginx:/usr/share/nginx/html:Z" EOF
volume
オプションは、source:destination
ディレクトリ間にバインド・マウントを作成します。:Z
オプションは、バインド・マウントに関連するSELinux権限の問題に対処します。Podmanは、コンテナ内のラベルと一致するようにボリュームのコンテンツのラベルを変更することでこれを行います。ここは、参照用のプレイブックの完成版です。
-
プレイブックを実行します。
ansible-playbook ~/podman-project/podman-playbook.yml
-
コンテナが実行中であることを確認します。
podman ps
出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f74aa726d470 ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 10 minutes ago Up 10 minutes ago 0.0.0.0:8080->80/tcp nginx
-
index.htmlファイルが存在することを確認します。
ls -l /home/oracle/nginx
出力例:
[oracle@ol-server podman-project]$ ls -l /home/oracle/nginx/ total 4 -rwxr-xr-x. 1 oracle oracle 41 Nov 5 16:46 index.html
-
バインドマウントを確認します。
cURLを使用して、コンテナのindex.htmlページおよび「ようこそ」メッセージを表示します。
curl localhost:8080
ここで、8080はコンテナ内のポート80へのローカル・ポート・マッピングです。
次のステップ
このチュートリアルを完了することで、Oracle Linux Automation Engineを使用してPodmanおよびコンテナでの作業を自動化する方法を理解する必要があります。containers.podmanコレクション内の他のモジュールを参照して、インフラストラクチャを自動化する追加のプレイブックを作成します。
関連リンク
- Oracle Linux Automation Managerドキュメント
- Oracle Linux Automation Managerのトレーニング
- Oracle Linuxトレーニング・ステーション
その他の学習リソース
docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Configure Podman Containers with Oracle Linux Automation Engine
F52952-04
Copyright ©2021, Oracle and/or its affiliates.