公開日:2022/9/10 0:00:00

podman for windows

Section 3 nginx のコンテナを使ってみる

概要

docker のコンテナも使えるらしいので、nginx で Web Server を建ててみます。

ここで使用している環境は下記の通り。

  • Windows 11 Pro (21H2)
  • WSL 2 (Windows Subsystem for Linux)
  • powershell 7
  • podman v4.2.0

事前準備

Web Server の動作確認なのでコンテンツを用意したりもするのでフォルダ構造を作っておきます。

[-] C:\
 `--[-] DevWeb
     `--[-] Lab-WebSite
         `--[-] html
             `-- index.html

という感じで作成してください。

html フォルダ内の index.html ファイルは下記の内容で作成します。別に適当なものがある場合はそれを入れても OK。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>Podman Container</title>
  </head>
  <body>
    <h1>Hello!</h1>
  </body>
</html>

これでブラウザでアクセスした場合に表示される html が準備できました。

マシンの起動

powershell を起動して podman のマシンを起動します。

PS C:\Users\Developer> podman machine start
Starting machine "podman-machine-default"

This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:

        podman machine set --rootful

API forwarding listening on: npipe:////./pipe/docker_engine

Docker API clients default to this address. You do not need to set DOCKER_HOST.
Machine "podman-machine-default" started successfully
PS C:\Users\Developer>

起動したらコンテナを取り寄せて動かしてみましょう。

nginx 入りのコンテナを使ってみる

podman run でコンテナを実行できるのですが、今回はいろいろとオプションが必要になります。

まず、ウェブサイトのコンテンツはローカル PC 内に作成したのでコンテナ内のフォルダと紐付けが必要。もう一つは Web Server なのでネットワーク的につながらないとなりあせん。

という事で使うオプションは

optionオプションの値説明
-d, —detachコンテナをバックグラウンドで実行し続ける
—rm終了したらコンテナを破棄する
-p,—publishstringコンテナのポートと Windows 内のポートを紐づける
—namestringコンテナの名前
-v, —volumestringArrayWindows のフォルダとコンテナ内のフォルダを紐づける

という感じになる。

では実行してみよう。

PS C:\Users\Developer> podman run --rm -d -p 8080:80 --name web -v c:/DevWeb/Lab-WebSite/html:/usr/share/nginx/html docker.io/library/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob sha256:7247f6e5c182559e2f7c010c11506802a0259958577a6e64c31b5b8f7cb0b286
Copying blob sha256:ca1981974b581a41cc58598a6b51580d317ac61590be75a8a63fa479e53890da
Copying blob sha256:7cb804d746d48520f1c0322fcda93249b96b4ed0bbd7f9912b2eb21bd8da6b43
Copying blob sha256:7a6db449b51b92eac5c81cdbd82917785343f1664b2be57b22337b0a40c5b29d
Copying blob sha256:e7a561826262f279acf3a671b2d5684a86a8dbc48dc88e4cb65305ba4b08cae1
Copying blob sha256:d4019c921e20447eea3c9658bd0780a7e3771641bf29b85f222ec3f54c11a84f
Copying config sha256:2b7d6430f78d432f89109b29d88d4c36c868cdbf15dc31d2132ceaa02b993763
Writing manifest to image destination
Storing signatures
5c75ce56361a37b6f7d84f97f0dbed204f7ae88ec2f2bb90b7c3f4cad8ebcbf8
PS C:\Users\Developer>

これでコンテナが起動したはず……なのでブラウザで確認してみます。

rootless の場合、1024 番ポート以下は指定することができないので、8080 に転送しています。なので http://localhost/ でアクセスできるはずです。

面倒な場合は curl で確認してみましょう。

PS C:\Users\Developer> curl http://localhost:8080/index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>Podman Container</title>
  </head>
  <body>
    <h1>Hello!</h1>
  </body>
</html>
PS C:\Users\Developer>

コンテナの状態を確認する

実行/停止中のコンテナリストを表示してみます。

PS C:\Users\Developer> podman ps -a
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS            PORTS                 NAMES
5c75ce56361a  docker.io/library/nginx:latest  nginx -g daemon o...  3 minutes ago  Up 3 minutes ago  0.0.0.0:8080->80/tcp  web
PS C:\Users\Developer>

動いていることはコレで確認できます。

コンテナを停止する

これもコマンドから実行します。止めた後、本当に消えたか確認もしてみましょう。

PS C:\Users\Developer> podman stop web
web
PS C:\Users\Developer> podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
PS C:\Users\Developer>

止めただけで image は残ったままなので、もう一度、コンテナを起動するときはダウンロードしない分早くなります。

マシンを終了させる

コンテナを使わないのならコンテナを動作させるためのベースを動かしていてもしょうがないので止めます。

PS C:\Users\Developer> podman machine stop
Machine "podman-machine-default" stopped successfully
PS C:\Users\Developer>

止めてしまうと、コンテナ関係のコマンドは通らなくなるので、動かす場合は、またmachine startから始めてください。

ここまでのまとめ

ざっと動かしてみました。

ここまではコマンドで実行していましたが、次は Podman Desktop (2022 年 9 月時点でベータ版)を使って、GUI から操作してみようと思います。