わからないなりに理解したい Podman ① ~ 何をするもの?

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

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

突然ですが、皆さんはコンテナを扱えているでしょうか?
私は…正直、さっぱりです。
と言いますか、なかなか機会を作らず「コンテナってよく聞くけど、結局どういうものなんだろうな…」とぼんやりとは思うものの、概要から少し調べてみようと思うたびに用語や概念の多さに撃沈する…という有り様でした。

今回は Podman をとりあえず使ってみる形で、私のように「コンテナの入口に向かおうとしたけれど、入口ってどこにあるの…」となってしまっている人の足掛かりとなるような記事になればいいな、と思って書いています。

■とりあえず Podman を使ってみる

今回使う Podman は、コンテナを扱うための “コンテナエンジン” と呼ばれるものの一種…というのはひとまず置いておいて、深く考えずに動かしてみましょう。
なお、以下の手順は RHEL8 上で行うことを想定しています。

・インストール

RHEL8 では以下の 2つのコマンドを実行することで、Podman をインストールできます。

他の OS、ディストリビューションを使用する場合はこちらのマニュアルを参照してください。

・Podman で Apache HTTPD を動かしてみる

ではとりあえず Podman を使ってみましょう。
今回は docker.io で公開されている Apache HTTPD を使ってみます。

その前に、curl コマンドで今回使う 8080番ポートに接続してもエラーが出ることを確認しておきましょう。

さて、Podman で HTTPD を動かす方法ですが…以下のコマンドを実行してみてください。
実行にはちょっと時間がかかるかもしれません。

これで HTTPD の起動ができました。ただ動かすだけなら驚くほど簡単ですね。
先と同じ curl コマンドで確認してみましょう。

きっとこのように “It works!” と返ってくるはずです。

・もう一つ Apache HTTPD を動かしてみる?

続けて以下のコマンドを実行してみてください。
先の実行コマンドの “8080” の部分を “8081” に変えただけのコマンドです。

こちらも特に問題なく、そして恐らく先ほどよりも早く実行できるはずです。
この状態で curl で 8081番ポートを確かめてみると、やはり “It works!” と返ってくるはずです。

そりゃそうだろう、という感じもしますが、ちょっと待ってください。
特に細かい設定などを何もしていないのに、なんかたった 2つのコマンドで同じ環境に 2つの HTTPD が別々に動いているっぽいですね。

・Podman の状態を確認してみる

最後に、”podman ps” コマンドで Podman の状態を確認してみましょう。
以下のような、”PORTS” が 8080 のものと 8081 のものの2行が表示されている状態になっているはずです。

・Podman で動かした Apache HTTPD を片づける

さて、ここからは今回使った HTTPD を片づけていきましょう。
まずは “podman stop” コマンドで停止させます。引数として、先ほど確認した “podman ps” コマンドの結果から、8080 のほうの行の “CONTAINER ID” を渡しましょう。

その後 “podman ps” コマンドを再実行すると “PORTS” が 8080 の行が消えており、curl で 8080番ポートを確認してもエラーが返ってくるはずです。

もう片方も以下のコマンドで停止しましょう。
CONTAINER ID を指定する代わりに “-l” オプションを使えば、最も最近起動したものを選んで停止してくれます。

さて、これで今回使った HTTPD は停止できました。しかし、まだこれらは「停止状態」で残っています。
停止状態のものを含めて Podman の状態を確認する場合、”podman ps” コマンドに “-a” オプションをつけることで確認できます。

今回の確認のためだけに作ったものを残していても仕方がないので、これらは削除してしまいましょう。
削除する場合は “podman rm” コマンドです。”podman stop” と同じく CONTAINER ID 指定や “-l” オプションも使えますが、ここは纏めて削除するため以下のコマンドを実行してみてください。

これで今回使った HTTPD はきっちり削除できました。

ここまででなんとなく Podman を使ってみましたが、「思ったより簡単に使えそうだなー」とぼんやり感じられたのではないでしょうか。

■で、結局コンテナって何?

さて、なんとなく Podman を使って HTTPD を動かしてみましたが、コンテナはどこに出てきたのでしょう?

…と言っても “CONTAINER ID” などと出てきていますし、バレバレですね。
コンテナは Podman で管理しているもの、今回の例で言えば HTTPD (と HTTPD を動かすために Podman が作成した隔離空間) のことです。

コンテナの内容はコンテナイメージと呼ばれるものを基に作成されます。
Podman などのコンテナエンジンは、アプリケーションの動作に必要な最低限のものを纏めたコンテナイメージを基に、隔離空間 “コンテナ” にそのアプリケーションが動作するためだけの環境を作成・管理するもの…と思っておけば概ね間違いはないはずです。
今回の例で言えば、実行する際に使ったコマンドにあった “docker.io/library/httpd” がコンテナイメージに該当します。

なお、Podman で扱うコンテナ・コンテナイメージは OCI (Open Container Initiative) という団体が定めた基準に従ったもので、OCI コンテナと呼ばれることもあります。
今回使ったコンテナイメージは、Podman と同じくコンテナエンジンの一種である docker 向けのもののように見えますが、docker もまた OCI コンテナを扱うものであるため、docker 向けに公開されているコンテナイメージが Podman でも使える、というカラクリになっています。

もっとコンテナなどについて詳細に知りたい!という方はこちらの記事や Podman や docker などのマニュアル等を参照してください。

【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜

■最後に

今回はとりあえずなんとなくで Podman を動かしてみました。
Podman やコンテナって、なんとなく、ぼんやりとだけどこんな感じなのかなぁ…とりあえず動かせはしたなぁ…くらいの感触を持ってもらえたなら幸いです。

なお余談ですが、Podman の公式によると Podman は docker のコマンドとの互換性がある、とされており、例えば
 ・”docker run” → “podman run”
 ・”docker ps” → “podman ps”
などのように Podman では、多くの docker で使用できるコマンドの “docker” を “podman” に置き換えた形でほぼ同じ機能を使うことができます。
そのため、docker に慣れている方は、特に難なく Podman を扱えるかと思います。

今回は非常にざっくりとした記事ですが、同じくらいのざっくり感でまたいずれ少し Podman について書いていこうと思っていますので、よろしければその時もお付き合いください。





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



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


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

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

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

Be the first to comment

Leave a Reply

Your email address will not be published.


*