Docker学習 - nginxコンテナを起動してブラウザから確認しよう
今回のDocker学習の目標
今回のnginxイメージを利用したDocker学習の目標として以下の4点としました。
- Docker上にnginxコンテナを作成して指定したポート番号で起動できる
- ブラウザからnginxのトップページを確認できる
- nginxコンテナの停止と起動ができる
- 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
エラーが発生していなければブラウザから
にアクセスしてみましょう。
正常に動作していれば以下のような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点を学習しました。
- Docker上にnginxコンテナを作成して指定したポート番号で起動できる
- ブラウザからnginxのトップページを確認できる
- nginxコンテナの停止と起動ができる
- nginxコンテナの削除ができる
hello-worldよりも実行結果もブラウザで確認できますし、バックグラウンド実行やポート番号指定などの方法も学ぶことができる、手軽にDockerを体験できるおすすめの方法です。
余裕があれば、nginxを複数起動(8888ポート以外に7777ポートなどで)してみるとコンテナの便利さが実感できますよ。