Docker学習 - nginxコンテナを起動してブラウザから確認しよう

2020年2月22日Docker

今回のDocker学習の目標

今回のnginxイメージを利用したDocker学習の目標として以下の4点としました。

  1. Docker上にnginxコンテナを作成して指定したポート番号で起動できる
  2. ブラウザからnginxのトップページを確認できる
  3. nginxコンテナの停止と起動ができる
  4. nginxコンテナの削除ができる

dockerのnginxイメージを取得する

「docker image ls」で現在のイメージの状態を確認

まず、「docker image ls」コマンドで取得済みのdockerイメージを確認してみましょう。

$ docker image ls
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
hello-world                latest              fce289e99eb9        13 months ago       1.84kB

前回Dockerの動作確認に使用したhello-worldのイメージのみで、nginxのイメージはない状態です。

Dockerのインストールからhello-worldを実行するまでについては以下の記事を参考にしてください。

「docker pull nginx」でnginxイメージを取得

今回は特にバージョンを指定せずに最新のnginxを取得してみましょう。

コマンドは「docker pull nginx」です。

コマンドを実行すると、イメージのダウンロードが始まります。

特にエラーが発生しなければこのような表示になります。

$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bc51dd8edc1b: Already exists
66ba67045f57: Pull complete
bf317aa10aa5: Pull complete
Digest: sha256:ad5552c786f128e389a0263104ae39f3d3c7895579d45ae716f528185b36bc6f
Status: Downloaded newer image for nginx:latest

取得できたか「docker image ls」でイメージの状態を確認

nginxのイメージが取得できたか先ほどと同様に「docker image ls」で確認してみましょう。

$ docker image ls
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
nginx                      latest              2073e0bcb60e        2 weeks ago         127MB
hello-world                latest              fce289e99eb9        13 months ago       1.84kB

3行目に「nginx」の行が追加されていますね。

また、TAGが「latest」となっているので最新バージョンが取得されていることがわかります。

Dockerのnginxイメージからコンテナ作成して起動する

nginxのイメージが取得できたら、次にnginxコンテナを作成し起動しましょう。

その前に、現在のコンテナの状態を確認しておきましょう。

 

「docker container ls -a」で作成済みのコンテナを確認

作成済みのコンテナを確認するコマンドは「docker container ls」です。

実行してみましょう。

docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

前回、hello-worldのコンテナを作成されている方は「コンテナがない!」と思ってしますかもしれませんが、「docker container ls」はオプションを指定しない場合は実行中のコンテナの一覧が表示されます。

停止中のコンテナも含めて表示する場合は「docker container ls -a」と「-a」オプションを指定してみましょう。

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
09e2b708d09c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       determined_ritchie

前回、hello-worldを実行した方はhello-worldのコンテナが表示されましたね。

「STATUS」の「Exited (0) 6 minutes」は「6分前に正常に終了している」ということです。

hello-worldの場合は標準出力に文字を表示して終了するのでこのような結果になっています。

「docker run -d -p 8888:80 nginx」でnginxを起動

では、nginxイメージからコンテナを作成し起動してみましょう。

コマンドの説明の前にまずは「docker run -d -p 8888:80 nginx」と実行してみてください。

$ docker run -d -p 8888:80 nginx
c7161c65bf312a88aa7d5c77508fadf17acadbaffe39530e2c28cb4fd5810f90

エラーが発生していなければブラウザから

http://localhost:8888/

にアクセスしてみましょう。

正常に動作していれば以下のようなnginxの初期トップ画面が表示されるはずです。

「docker run -d -p 8888:80 nginx」のオプションについて

hello-worldの場合は「docker run hello-world」とオプションを指定しないシンプルなコマンドで実行してみましたが、今回実行したnginxには「-d」と「-p」オプションを指定しています。

「-d」オプション

「-d」オプションはコンテナをバックグラウンド実行するオプションです。

「-p」オプション

「-p」オプションはコンテナの標準ポートを指定したポートに割り当てるオプションです。

-p <公開するポート>:<コンテナのポート>

「docker container ls」でコンテナの状況を確認

実行中のコンテナを確認する「docker container ls」コマンドを実行しましょう。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c7161c65bf31        nginx               "nginx -g 'daemon of…"   34 minutes ago      Up 34 minutes       0.0.0.0:8888->80/tcp   boring_hodgkin

「-d」オプションでバックグラウンド実行しているので、ステータスが「Up 34 minutes」と実行開始から34分経過中であることがわかります。

また、「PORTS」の「0.0.0.0:8888->80/tcp」で「-p」オプションでコンテナのポート80を公開ポート8888に転送されていることがわかりますね。

作成したnginxコンテナを停止/再起動/削除する

nginxコンテナが起動している状態から停止する操作、再び起動する操作、削除する操作について実行してみましょう。

「docker container stop <コンテナID>」でコンテナを停止

まずはコマンドの実行結果を見てください。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c7161c65bf31        nginx               "nginx -g 'daemon of…"   34 minutes ago      Up 34 minutes       0.0.0.0:8888->80/tcp   boring_hodgkin

$ docker container stop c7
c7

1行目:コンテナを停止する場合は停止したいコンテナIDを調べる必要があります。

「docker container ls」で「CONTAINER ID」を調べましょう。

サンプルの場合は「CONTAINER ID」が「c7161c65bf31」であることがわかります。

5行目:「docker container stop <コンテナID>」でコンテナを停止できます。

ブラウザから確認しても停止していることがわかります。

ポイント

指定するコンテナIDは全て入力する必要はありません。
複数のコンテナがあった場合に区別できる部分まで先頭から入力するればOKです。
サンプルの場合は「c7」のみ入力で「c7161c65bf31」のコンテナIDであると認識されています。

 

再び「docker container ls」や「docker container ls -a」停止していることを確認しましょう。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

起動中のコンテナを確認する「docker container ls」コマンドの一覧からnginxが表示されていないことがわかります。

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
c7161c65bf31        nginx               "nginx -g 'daemon of…"   About an hour ago   Exited (0) 18 minutes ago                       boring_hodgkin
09e2b708d09c        hello-world         "/hello"                 2 hours ago         Exited (0) 2 hours ago                          determined_ritchie

全てのコンテナを確認する「docker container ls -a」でもnginxコンテナが「STATUS」が「Exited (0) 18 minutes ago」と正常に停止していることがわかります。

「docker container start <コンテナID>」でコンテナを起動

一度作成したコンテナは「docker container start <コンテナID>」で起動することができます。

停止の場合と同じくコンテナIDは全てを入力する必要はありませんので、「c7」などでOKです。

$ docker container start c7
c7

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c7161c65bf31        nginx               "nginx -g 'daemon of…"   About an hour ago   Up 13 seconds       0.0.0.0:8888->80/tcp   boring_hodgkin
ポイント

2回目の起動はコンテナを作成する必要がないので起動時間が早くなります。

「docker container rm <コンテナID>」でコンテナを削除

コンテナを停止するコマンドは「docker container rm <コンテナID>」ですが、起動中の状態から削除コマンドを実行すると以下のようなエラーとなります。

$ docker container rm c7
Error response from daemon: You cannot remove a running container c7161c65bf312a88aa7d5c77508fadf17acadbaffe39530e2c28cb4fd5810f90. Stop the container before attempting removal or force remove

コンテナを削除する場合はまずは「docker container stop <コンテナID>」コマンドで停止してから削除しましょう。

$ docker container stop c7
c7

$ docker container rm c7
c7

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
09e2b708d09c        hello-world         "/hello"            2 hours ago         Exited (0) 2 hours ago                       determined_ritchie

停止 → 削除の順に実行するとnginxコンテナが削除されました。

まとめ

今回はnginxイメージを利用して以下の4点を学習しました。

  1. Docker上にnginxコンテナを作成して指定したポート番号で起動できる
  2. ブラウザからnginxのトップページを確認できる
  3. nginxコンテナの停止と起動ができる
  4. nginxコンテナの削除ができる

hello-worldよりも実行結果もブラウザで確認できますし、バックグラウンド実行やポート番号指定などの方法も学ぶことができる、手軽にDockerを体験できるおすすめの方法です。

余裕があれば、nginxを複数起動(8888ポート以外に7777ポートなどで)してみるとコンテナの便利さが実感できますよ。

Docker

Posted by snow