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

AlmaLinux 8.6

AlmaLinux 8.6 セットアップメモ

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

概要

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

事前準備

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

ログインしているユーザのフォルダ直下にhtmlフォルダを作成するのが早いでしょう。

[vagrant@localhost ~]$ mkdir ~/html
[vagrant@localhost ~]$

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>

これもコマンドで追加してしまいます。

[vagrant@localhost ~]$ cat << 'EOS'  > ~/html/index.html
> <!DOCTYPE html>
> <html lang="ja">
>   <head>
>     <meta charset="utf-8" />
>     <title>Podman Container</title>
>   </head>
>   <body>
>     <h1>Hello!</h1>
>   </body>
> </html>
> EOS
[vagrant@localhost ~]$

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

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

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

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

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

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

という感じになる。

では実行してみよう。

[vagrant@localhost ~]$ podman run --rm -d -p 8080:80 --name web -v ~/html:/usr/share/nginx/html docker.io/library/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 600c24b8ba39 done
Copying blob 31b3f1ad4ce1 done
Copying blob fd42b079d0f8 done
Copying blob 30585fbbebc6 done
Copying blob 18f4ffdd25f4 done
Copying blob 9dc932c8fba2 done
Copying config 2d389e5459 done
Writing manifest to image destination
Storing signatures
a1b71a2ccb0e1018bd88751d6533571a08bbba587101fc60cad90d8f0486997a
[vagrant@localhost ~]$

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

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

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

[vagrant@localhost ~]$ 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>
[vagrant@localhost ~]$

vagrant 上で動作させている場合

Vagrantfile 内に forwarded_port の設定があるので、転送ポートを入れ替えればブラウザからポート指定なしで見ることができます。

config.vm.network "forwarded_port", guest: 8080, host: 80

あとは仮想マシン上で firewall を開けておきましょう。

[vagrant@localhost ~]$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

port番号がついているかどうかが影響することは少ないと思うけれど……

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

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

[vagrant@localhost ~]$ podman ps -a
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                 NAMES
a1b71a2ccb0e  docker.io/library/nginx:latest  nginx -g daemon o...  15 minutes ago  Up 15 minutes ago  0.0.0.0:8080->80/tcp  web
[vagrant@localhost ~]$

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

コンテナを停止する

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

[vagrant@localhost ~]$ podman stop web
web
[vagrant@localhost ~]$ podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[vagrant@localhost ~]$

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

コンテナイメージを探す

今回、コンテナイメージをdocker hubから取得していますが、もう一つ、Redhatが管理しているQuay.ioがあります。似たような名称であるだろうから、どっちがいいかは取り寄せて、中身をチェックする感じになるのではないかと……