【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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」と呼ぶことから来てるらしい。かわいい)

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
2
読み込み中...
2 票, 平均: 1.00 / 12
821
X facebook はてなブックマーク pocket
【ウェビナー】マルチクラウド入門 ~あなたのビジネスに最適なクラウドとは?主要8クラウド最新情報をお届け!~

【ウェビナー】マルチクラウド入門 ~あなたのビジネスに最適なクラウドとは?主要8クラウド最新情報をお届け!~

【ウェビナー】運用体制から具体的な手順まで!クラウドサーバー運用保守の全貌を大公開

【ウェビナー】運用体制から具体的な手順まで!クラウドサーバー運用保守の全貌を大公開

この記事をかいた人

About the author

かわ けん

システムソリューション部所属
好奇心旺盛ポケ○ン