Dockerの代わりにrootlessで使えるPodmanを触ってみる
こんにちは
家の野菜室はバージョニング無効
システムソリューション部のかわいです。
最近また寒いですね。
今回は Podman について、入門者向けに記事にしたいと思います。
.--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~
Podmanって?
Pod Managerの略。
Red Hat社製のOSSコンテナツールです。Dockerと互換性があり、使い方はほぼ同じです。詳しくは以下公式ドキュメントを参照。
https://www.redhat.com/ja/topics/containers/what-is-podman
え?じゃあDockerで良くない?って思ったかもしれませんが、
Podmanはデフォルトでrootless(root権限なし)で使えるのでセキュアな点に優位性があります。
(※Dockerでも可能だが、追加設定が必要)
なぜrootlessが安全なのかというと、
Dockerはrootが起動したデーモンとして動き、ホストマシンからREST API経由で通信を行います。
その際ドメインソケットを使用するため そこでroot権限が必要になる→コンテナからホストへの攻撃が可能になる、という理屈です。
では早速使ってみましょう。
インストール
■環境
Ubuntu 24.04 LTS
インストール自体は簡単。
※docker-composeを使う方は同等の「podman-compose」を一緒に入れても良いです。
$ sudo apt update $ sudo apt install podman $ podman --version podman version 4.9.3
rootlessモードの確認(trueになっていればok)
$ podman info | grep rootless rootless: true
イメージのpull
インストールが済んだので、一般ユーザのまま試しにApacheイメージを引っ張ってきます。
$ podman pull docker.io/library/httpd Trying to pull docker.io/library/httpd:latest... Getting image source signatures Copying blob 79b49624e34b done | Copying blob d7ad38c6dd97 done | Copying blob 4f4fb700ef54 done | Copying blob 9bd25d4f7b77 done | Copying blob 7d9f97915db2 done | Copying blob bc0965b23a04 done | Copying config 494b2b45fd done | Writing manifest to image destination 494b2b45fd74cbf7eb7dc9cfeda02b26c9450e26719afaf1914635832217c4ce
完了したので起動します。
今回はTCP/8888を使用します。
$ podman run -dt -p 8888:80/tcp docker.io/library/httpd 6e5578b6ab93e131593325aa61c8b78487d6d602a74c78b714aa8b089ac12d0f # 起動状態の確認 $ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e5578b6ab93 docker.io/library/httpd:latest httpd-foreground 5 seconds ago Up 5 seconds 0.0.0.0:8888->80/tcp quizzical_tharp
起動してきたので早速アクセスしてみます。
「It works!」と表示されればok
$ curl http://127.0.0.1:8888 <html><body><h1>It works!</h1></body></html>
ブラウザでも表示されました。
Dockerと同じように、ログとプロセス状態の確認も可能です。
$ podman logs -l [Thu Dec 12 02:48:15.892285 2024] [mpm_event:notice] [pid 1:tid 1] AH00489: Apache/2.4.62 (Unix) configured -- resuming normal operations [Thu Dec 12 02:48:15.893410 2024] [core:notice] [pid 1:tid 1] AH00094: Command line: 'httpd -D FOREGROUND' 10.0.2.100 - - [12/Dec/2024:02:48:57 +0000] "GET / HTTP/1.1" 200 45 10.0.2.100 - - [12/Dec/2024:02:48:57 +0000] "GET /favicon.ico HTTP/1.1" 404 196 10.0.2.100 - - [12/Dec/2024:02:50:24 +0000] "GET / HTTP/1.1" 200 45 ~$ podman top -l USER PID PPID %CPU ELAPSED TTY TIME COMMAND root 1 0 0.000 4m36.020462289s pts/0 0s httpd -DFOREGROUND www-data 8 1 0.000 4m36.022522465s pts/0 0s httpd -DFOREGROUND www-data 9 1 0.000 4m36.02299156s pts/0 0s httpd -DFOREGROUND www-data 10 1 0.000 4m36.023751351s pts/0 0s httpd -DFOREGROUND
もちろん若干の違いはあるものの、Dockerを触ってる人なら違和感なく扱えると思います。
$ podman run quay.io/podman/hello Trying to pull quay.io/podman/hello:latest... Getting image source signatures Copying blob 81df7ff16254 done | Copying config 5dd467fce5 done | Writing manifest to image destination !... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ Project: https://github.com/containers/podman Website: https://podman.io Desktop: https://podman-desktop.io Documents: https://docs.podman.io YouTube: https://youtube.com/@Podman X/Twitter: @Podman_io Mastodon: @[email protected]
ちなみにPodman公式キャラはアザラシではなく「Selkies(セルキー)」というスコットランドの神話上の生き物らしいです。
(セルキーの群れのことを「pods」と呼ぶことから来てるらしい。かわいい)
完