8
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

ArchLinuxのpodmanで非特権コンテナを使ってみる

注意

  • 調べながら書いた記録なので間違った内容があるかもしれません。間違いを指摘してもらえると嬉しいです…
  • ネットワークに関しては調べられていません

podman

image.png
https://github.com/containers/libpod

podmanはRedHatが開発しているコンテナランタイムで、2019/1/17に1.0がリリースされ話題になりましたね。RHELやFedoraには既に搭載されているようですが、今回はArchLinuxで試してみます。
podmanはDockerと異なりデーモンを常駐させる必要がなく、またDocker相当の機能が3つのプロジェクトに分かれているようです

  • Buildah(コンテナの構築)
  • Podman(コンテナの実行)
  • Skopeo(コンテナの共有/発見)

podmanの目標として掲げられているのは以下の機能です

  • 既存のDocker/OCIのイメージに対応
  • 認証や検証を含む様々なダウンロード方法への対応
  • コンテナイメージの管理(ファイルシステムのoverlayやイメージの階層の管理)
  • コンテナライフサイクルの完全なサポート
  • Pod(コンテナのグループ)のサポート
  • コンテナ、Pod間のリソースの分離
  • CRI-Oインターフェースの提供

コンテナ実行環境はrunC等のOCI互換なランタイムに、イメージの構築はBulidahに、コンテナの配布はSkopeoにそれぞれ任せているようです。

参考リンク

Install

ArchLinuxではAURに以前からパッケージが存在していましたが、2019/1/26にcommunityリポジトリに追加されました。同時にDocker互換CLI(podman-docker)も提供されています。

pacman -Sy podman podman-docker

非特権コンテナ

Dockerの問題点として権限の問題があります。Dockerの動作にはRoot権限のデーモンを必要とし、またコンテナ内のRootプロセスはホスト側でもRootプロセスとして振る舞ってしまいます。
実際に複数人数で共有するサーバーでDockerを使おうと思うと、ユーザーをdockerグループに追加する必要があり、これはほとんど無制限のsudo権限をあげるようなものです。

そこで必要になるのがコンテナ内でのユーザーIDをホスト側のユーザーIDと別のIDに割り当てる方法です。コンテナ内のRootがホスト側の起動したユーザーのUIDになればホスト側でユーザーが可能な動作しか出来なくなりますね。
この機能はユーザーが別のUIDでプロセスを起動出きることを意味するのでArchLinuxではデフォルトで無効になっています。有効化するには

sysctl -w kernel.unprivileged_userns_clone=1

を実行します。これで現在のセッションに対して有効になるので、必用に応じてsysctl.dで永続化します。

sub{uid,gid}

さてこれでUIDがマップ出きるようになりましたが、このままだと自分のUIDにしかマップできません。このままだとコンテナ内で新しくユーザーを作ることが出来なくて不便ですね。それを解決するためにLinuxでは自分が使うことが出来るサブのUID/GIDをそれぞれ/etc/subuid/etc/subgidで設定する事が出来ます。というかこれを設定しないとpodmanが動いてくれません。

/etc/subuid
root:100000:65536
/etc/subgid
root:100000:65536

これでそれぞれrootユーザーに100000番から65536個のUID/GIDをサブIDとして使えるようにします。自分のユーザーでpodmanを起動するには自分のユーザー名で登録する必要があります。良く分かりませんが一つも自分のユーザーのエントリが無いとpodmanを起動できません。

これでpodmanが起動出来るはずです。

podman ps

podmanのコマンドはalias docker=podmanとして動くようになっているので後は使い慣れたdockerと同じように使えます。

参考リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?