わからないなりに理解したい Podman ② ~ コンテナを書き換える

★★★ Live配信告知 ★★★
2021年締めくくり!フルリモートしたメンバーに大調査!
「完全リモートワーク」「住む所自由」のサイオスライフについて、プロフェッショナルサービスチームのメンバーを質問攻めします。
【2021/12/24(金) 17:00〜17:30】

こんにちは。サイオステクノロジー OSS サポート担当 山本 です。

今回は前回に引き続き、Podman を動かしながらなんとなくコンテナを使えるようになりたい…という趣旨で、コンテナ内を操作する方法をいくつか見ていきたいと思います。

■Podman でコンテナの中身を変えてみる

ここからは quay.io の httpd コンテナイメージを使って作成したコンテナに新しくページを追加する方法を例に、Podman でコンテナの中身を変更する方法を見ていきましょう。

今回は、以下のようなコマンドで起動したコンテナを例にしています。

・コンテナの bash を起動して直接操作する

まずはコンテナ内で直接コマンドを実行する方法です。
Podman では以下のコマンドで、指定したコンテナでコンテナ内で実行可能な任意のコマンドを実行することができます。

この podman exec コマンドでコンテナ内を操作していくことももちろん可能ですが、
これを利用して、以下のようなコマンドによってコンテナ内の bash を起動することで、
入力がコンテナを操作する bash に切り替わり、より自由にコンテナ内を操作できるようになります。

では試しに、コンテナ内の bash から新しいページを追加してみましょう。
cat コマンドで httpd の設定ファイルからコンテンツのパスを確認して、新しいファイルを作成します。

ファイルを作成したら exit コマンドでコンテナの bash を終了し、コンテナ内から抜けましょう。
更に、curl で先ほど作成されたページが追加されているかを確認します。
なお、quay.io の公式 httpd コンテナはデフォルトで https を使用する設定になっています。この例では “-k” オプションで証明書エラーを無視して確認していますが、こういった検証目的以外の場合はちゃんと設定するようにしてください。

無事、追加されていますね。

このように podman exec コマンドを使うことで、コンテナ内で様々な操作を行うことができます。

・コンテナにローカルファイルをコピーする

続いて、コンテナ内にファイルをコピーする方法を見ていきます。
Podman では以下のコマンドで、ローカルとコンテナ内でのファイルのやりとりができます。

このコマンドを利用して、適当なファイルをローカルで作成して先のコンテナへコピーし、コンテナの httpd に新しいページを追加してみます。

これで OK です。
curl で先ほどコピーしたページが追加されているかを確認します。

このように、コンテナ内とのファイルのやりとりは簡単にできます。

・ContainerFile (DockerFile) を使用して、新しいコンテナイメージを作る

先の 2つの方法は起動中のコンテナに対して変更を行う方法でしたが、
コンテナの設計書とも言えるコンテナイメージに変更を加え、新しい別のコンテナイメージを作成する方法もあります。

この方法では “podman build” コマンドを使用しますが、別途 ContainerFile という名前のファイルが必要になります。
ContainerFile にはどのコンテナイメージを元にするか、どういった変更を加えるかなどの情報を、既定の書式に従って記述します。
ContainerFile の書式の詳細につきましては、こちらのドキュメントなどを参照してください。

今回は先に使用した quay.io の httpd コンテナイメージに、コマンドとローカルファイルからのコピーによって新しく2つのページを追加したイメージを作成する ContainerFile を作りました。
この ContainerFile に合わせた、コピー元のファイルも用意します。

ContainerFile を作成したら、以下のようなコマンドを実行します。
(“-t” でコンテナイメージ名を指定します。今回は “test_image” という名前をつけています)

これで新しいコンテナイメージの作成ができました。
以下のコマンドでローカルに保存されたコンテナイメージを確認すると、先ほど指定した “test_image” という名前のコンテナイメージが保存されているはずです。

このコンテナイメージからコンテナを作成すると、先に ContainerFile で指定した操作、つまり今回で言えば新しいページ2種類の作成が行われていることが確認できるはずです。

■ところで、docker.io や quay.io って何だ?

今回使用したコンテナイメージにある quay.io や前回の docker.io についても少し触れておきます。

前回お話ししたとおり、コンテナを使うにはコンテナイメージが必要になります。
しかし、試してみるとわかると思いますが、特に事前に準備をしなくても podman でコンテナを動作させることができます。
これは、インターネット上に公開されているコンテナイメージをダウンロードして使用することができるからです。

このようにコンテナイメージの配布・保管などを行うものをコンテナレジストリと呼びます。
quay.io や docker.io などはこのコンテナレジストリを提供するサービスの一種です。
コンテナレジストリを提供するサービスは他にも Docker Hub や AWS の Amazon Elastic Container Registry (ECR)、Microsoft Azure の Azure Container Registry (ACR) などを始め、多数存在しています。

各コンテナレジストリは、管理する団体や方針、有償・無償の別やアカウント登録の要否などそれぞれ特徴が異なります。
また、当然ながら同じソフトウェアのコンテナイメージでも、コンテナレジストリやものによっては内容が大きく異なる場合があります。
例えば、前回と今回で使用した httpd のコンテナイメージを例に見てみると、動かし方も少し違いましたが…

 ・docker.io
Debian / Ubuntu によって管理・提供されている、とされるレジストリで、提供されているコンテナイメージも基本的には Debian / Ubuntu ベースのものが多いと考えられます。

 ・quay.io
現在は RedHat によって管理・提供されているレジストリで、提供されるコンテナイメージも基本的には RedHat 系 OS ベースのものが多いものと思われます。

このようにベース OS 自体が異なり、コンテナ内でデフォルトで使用できるコマンドにも大きく差があります。

■最後に

今回はコンテナの中身を書き換える方法について見てきました。
前回分と合わせれば、とりあえずはコンテナを動かして中身を書き換える…ということはできるはずです。
なんとなーく、一応コンテナ使うことはできるかなー、という気分になれていれば

しかし、冷静に考えるとここまでの話は「別にコンテナでやらなくてもよくない?」という内容です。
また次回、これぐらいのざっくり感でもう少し podman に関してお話していきたいと思います。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*