Podmanを使ってみた
この記事は openSUSE Advent Calendar 2019 の二日目です。
Kubicでは、コンテナを制御するコマンドに、dockerでなくてpodmanが採用されています。Podmanは、デーモンレス、ルートレスなコンテナ制御ソリューションで、主にRed Hatで開発されています。せっかくなので、podmanを使ってみました。
インストール
KubicやTumbleweedが新しいバージョンをパッケージングしているのに対し、Leap 15.1用は若干バージョンが古いようです。Podman は日進月歩で成長してますので、極力なら新しいバージョンを使いたい所。私はTumbleweedの派生であるMicroOSを使って、新しいバージョンを使っています。
ネットワーク設定ファイルパッケージ podman-cni-config も同時にインストールする必要がありますが、podmanの推奨に設定されていて、podmanのインストールだけで自動的に入ってくれるかもしれません。
zypper in podman podman-cni-config
MicroOSはトランザクショナルサーバーのため、私はtransactional-updateコマンドでインストールしました。(このあたりの詳細はGeekoMagazineに書いています。)
デーモンレス
Dockerを動かす時、Dockerのサーバーを起動させますよね。podmanはサーバーを使わない設計なので、サーバーを起動させる必要はありません。また、サーバー型であることに起因する脆弱性も回避しているとのことです。
ルートレス
Dockerはルート権限で実行するか、Dockerグループに追加したユーザーで実行する必要があり、これが脆弱性に結びつくのでは、と言われています。podmanは一般ユーザー権限でも動作するように設計されていて、この問題を回避しています。
ただ、私が使ってみた感じですと、一般ユーザーでボリュームマウントがうまくいかないんですよね・・・おいおい調査したいと思います。
Docker互換
もちろん、Dockerイメージをそのままrunすることができます。また、コマンドもDockerと同じように設計されていて、dockerの部分をpodmanに置き換えるだけでほとんどのコマンドを実行できます。実際に、dockerコマンドをpodmanのエイリアスにする、という代替方法も紹介されています。
- コンテナ実行 podman run 【イメージ名】
- コンテナ一覧 podman ps
- コンテナ停止 podman stop 【コンテナIDやコンテナ名】
- コンテナ削除 podman rm 【コンテナIDやコンテナ名】
などなど。
使ってみて
コマンドがDockerと同じなので、同じように使えて、違和感とかは全くありませんでした。サーバー起動に気を使わなくていいのは、素直に楽ですね。調査すればDockerとPodmanの差みたいなところもでてくると思うのですが、そこまで使い込むのはもうちょっと先になりそうです。(通常の使用では差がわかりませんでした。)
イメージ作成
Podmanは、Dockerのコンテナ制御、イメージ作成、の機能のうち、コンテナ制御を受け持っています。イメージの作成はbuildahというソリューションで行うことができます。アドベントカレンダーの中で、buildahについても紹介できればと思っています。
明日は ftakeさんによる、OSC Tokyo/Fallのイベントレポートです。・・・そういえば、私も参加させて頂いていました。 ftakeさんの後にイベントレポート書きますね!