ArchLinuxのpodmanで非特権コンテナを使ってみる
注意
- 調べながら書いた記録なので間違った内容があるかもしれません。間違いを指摘してもらえると嬉しいです…
- ネットワークに関しては調べられていません
podman
https://github.com/containers/libpod
podmanはRedHatが開発しているコンテナランタイムで、2019/1/17に1.0がリリースされ話題になりましたね。RHELやFedoraには既に搭載されているようですが、今回はArchLinuxで試してみます。
podmanはDockerと異なりデーモンを常駐させる必要がなく、またDocker相当の機能が3つのプロジェクトに分かれているようです
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が動いてくれません。
root:100000:65536
root:100000:65536
これでそれぞれroot
ユーザーに100000
番から65536
個のUID/GIDをサブIDとして使えるようにします。自分のユーザーでpodmanを起動するには自分のユーザー名で登録する必要があります。良く分かりませんが一つも自分のユーザーのエントリが無いとpodmanを起動できません。
これでpodmanが起動出来るはずです。
podman ps
podmanのコマンドはalias docker=podman
として動くようになっているので後は使い慣れたdockerと同じように使えます。
参考リンク
Author And Source
この問題について(ArchLinuxのpodmanで非特権コンテナを使ってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/termoshtt/items/61555b7380b83b540408著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .