Podmanを使ってみた

By Syuta Hashimoto @ 2019-12-02 22:31

この記事は 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さんの後にイベントレポート書きますね!