PR
PR

Ubuntuで始めるPodman入門: Nginxコンテナ起動まで

記事内に広告が含まれています。

「デーモンレス」で話題のコンテナツールPodmanをUbuntuに導入し、Webサーバーの定番であるNginxを動かすまでの手順を解説します。

Podmanとは?

Podmanは、コンテナを管理・実行するための強力なツールです。

Dockerと高い互換性を持ちながら、いくつかの決定的な違いがあります。

  • アーキテクチャ
    • Podman:デーモンレス (Daemonless)
    • Docker:クライアント/サーバー型のデーモン(Docker Engine)が必要
  • セキュリティ
    • Podman:ルートレス (Rootless) 実行が容易
    • Docker:デーモンがroot権限で動作するため、セキュリティリスクが存在

Podmanは、デーモン(常駐プロセス)を必要とせず、root権限なしでコンテナを実行できるため、セキュリティ上のメリットが非常に大きいのが特徴です。

既存のDockerコマンドがほぼそのまま使えるため、スムーズに移行できます。

Podmanのインストール

まずは、UbuntuにPodmanをインストールします。

インストール自体はaptを使って簡単に行うことができます。

$ sudo apt update
$ sudo apt install -y podman

インストールが完了したら、バージョンを確認してみましょう。

バージョン情報が表示されれば、インストールは成功です。

$ podman --version
podman version 4.9.3

Nginxイメージの取得

コンテナの元となるNginxのプログラム本体(イメージ)を、コンテナレジストリからダウンロード(プル)します。

Nginxイメージのダウンロード(プル)

今回は、最も広く使われているDocker HubからNginxの公式イメージを取得します。

$ podman pull docker.io/library/nginx:latest

ダウンロードされたイメージの確認

ダウンロード済みのイメージは、「podman images」コマンドで確認できます。

$ podman images
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx  latest      203ad09fc156  7 weeks ago  197 MB

一覧に「docker.io/library/nginx」が表示されていればOKです。

Nginxコンテナの起動

ダウンロードしたイメージを元に、WebサーバーとしてNginxコンテナを実行します。

コンテナ起動コマンド

ホストOSの8080番ポートへのアクセスを、コンテナ内のNginxのデフォルトポートである80番ポートに転送するように設定します。

$ podman run -d --name podman-nginx -p 8080:80 nginx:latest

コマンドの各オプションの意味は以下の通りです。

  • -d: デタッチドモードで実行(バックグラウンドで実行)
  • --name コンテナ名: コンテナ名に分かりやすい名前を設定(今回は「podman-nginx」という名前を設定)
  • -p 8080:80: ポートフォワーディングの設定(ホストOSの8080番ポートを、コンテナ内部の80番ポートに転送)
  • nginx:latest: 起動するコンテナのイメージを指定

動作確認

起動させたNginxのコンテナの動作確認を行っていきます。

コンテナの起動ステータスの確認

コンテナが正しく実行されているかを確認します。

「podman ps」コマンドで、STATUSが Up になっていれば正常動作中です。

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS         PORTS                 NAMES
b883de5b47a9  docker.io/library/nginx:latest  nginx -g daemon o...  26 seconds ago  Up 26 seconds  0.0.0.0:8080->80/tcp  podman-nginx

curlコマンドで動作確認

「curl」でlocalhostの8080番ポートに接続してNginxの動作を確認します。

HTMLのページデータを取得できて、Welcome to nginx!が表示されれば成功です。

$ curl -s http://localhost:8080 | head -5
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

Webブラウザで動作確認

Webブラウザから「http://localhost:8080」にアクセスします。

Nginxの「Welcome to nginx!」というページが表示されれば成功です。

コンテナの停止

作業を終えてコンテナを停止したい場合は、podman stopコマンドを使用します。

podman stop コンテナ名

今回の場合は、起動時に設定した「podman-nginx」を指定します。

$ podman stop podman-nginx
podman-nginx

停止後のコンテナは、「podman ps -a」コマンドで確認できます。

停止しているコンテナはSTATUSがExitedになります。

$ podman ps -a
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS                     PORTS                 NAMES
b883de5b47a9  docker.io/library/nginx:latest  nginx -g daemon o...  26 minutes ago  Exited (0) 51 seconds ago  0.0.0.0:8080->80/tcp  podman-nginx

コンテナの削除

コンテナを削除したい場合は、コンテナを停止させたあとに「podman rm」コマンドを使います。

podman rm コンテナ名

「podman-nginx」を指定してコマンドを実行し、コンテナを削除します。

$ podman rm podman-nginx
podman-nginx

「podman ps -a」を実行し、コンテナが一覧から消えていることを確認してください。

$ podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

コマンドまとめ

今回の作業で使用したPodmanのコマンドをまとめました。

イメージの管理

  • イメージの検索 (search): podman search イメージ名
  • イメージのダウンロード (pull): podman pull イメージ名
  • ダウンロード済みイメージの一覧 (images): podman images
  • イメージの削除 (rmi): podman rmi イメージ名

コンテナの管理

  • コンテナの起動 (run -it): フォアグラウンド
  • podman run -it --name コンテナ名 -p ポート番号:ポート番号 イメージ名

    「-p ポート番号:ポート番号」オプションのポートフォワーディングは必要に応じて使用

  • コンテナの起動 (run -d): デタッチドモード(バックグラウンド)
  • podman run -d --name コンテナ名 -p ポート番号:ポート番号 イメージ名

    「-p ポート番号:ポート番号」オプションのポートフォワーディングは必要に応じて使用

  • 実行中のコンテナ一覧 (ps): podman ps
  • すべてのコンテナ一覧 (ps -a): podman ps -a
  • コンテナの停止 (stop): podman stop コンテナ名
  • コンテナの削除 (rm): podman rm コンテナ名

レジストリ(Registry)設定について

Podmanの初期設定では、イメージ名を省略してプル(pull)したり検索(search)したりする際に、どのオンライン倉庫(レジストリ)を探しに行くべきかの情報が不足している場合があります。

そのため、そのままでは「podman pull nginx」のようにレジストリ名を省略したコマンドが使えないため、以下のようにレジストリも含めてイメージ名を指定する必要があります。

podman pull docker.io/library/nginx:latest

もし、「podman pull nginx」のようにレジストリ名を省略してイメージを取得したい場合は、registries.confファイルにレジストリの情報を検索対象として追加してあげる必要があります。

registries.conf の作成と編集(ルートレスモード)

rootユーザ以外の一般ユーザ(ルートレスモード)でPodmanを使用している場合はユーザ固有の設定ファイル「 ~/.config/containers/registries.conf」を作成し、そこにレジストリの情報を設定します。

今回は最も広く使われているコンテナイメージのレジストリである、Docker Hub (docker.io)がを追加していきます。(Docker Hubにはほとんどの公式イメージ(Nginx, Pythonなど)があります。)

$ mkdir -p ~/.config/containers
$ vi ~/.config/containers/registries.conf

設定内容は以下のとおりです。

[registries.search]セクションの「registries」リストに、検索したいレジストリを優先度の高い順に並べます。

[registries.search]
registries = ['docker.io', 'quay.io']
  • docker.io: Docker Hubは最も広く使われているコンテナイメージのレジストリ
  • quay.io: Red Hat(レッドハット)が提供・運用しているレジストリでエンタープライズやセキュリティ関連のイメージが豊富

これでレジストリを省略した形のイメージだけでpullやsearchが出来るようになります。

$ podman search nginx | head -n 3
NAME                                              DESCRIPTION
docker.io/library/nginx                           Official build of Nginx.
docker.io/nginx/nginx-ingress                     NGINX and  NGINX Plus Ingress Controllers fo..

コメント

タイトルとURLをコピーしました