はじめる前に
- 必須お使いのパソコンに Docker Desktop をインストールできること(Windows / Mac対応)
- 必須ターミナル(PowerShellまたはコマンドプロンプト)を開いて文字を入力できること
- あると良い「サーバー」「ポート番号」という言葉のイメージがある
※ このハンズオンは AWSのリソースを一切使いません。お使いのパソコンの中だけで完結します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
docker run コマンドの各オプションについての説明です。
docs.docker.com/reference/cli/docker/container/run/
docker logs コマンドリファレンス
↗
コンテナのログを確認する docker logs コマンドについての説明です。
docs.docker.com/reference/cli/docker/container/logs/
※ Docker社の公式ドキュメント(英語)です。リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
アプリケーションを別のパソコンやサーバーで動かそうとすると、「自分の環境では動くのに、他の環境では動かない」という問題によく出くわします。これは、OSのバージョンやインストールされているソフトウェアの違いが原因で起こります。
Docker は、アプリケーションと、それを動かすために必要なものをまとめて「イメージ」というパッケージにし、そこから「コンテナ」という実行単位を起動する仕組みです。今回は、公開されているWebサーバーのイメージ(nginx)を取得し、コンテナとして起動して、基本的な操作の流れをひととおり体験します。
「イメージ」と「コンテナ」は何が違うの?
イメージは、アプリケーションと実行環境をまとめた「設計図」です。コンテナは、その設計図から実際に起動した「動いている実体」です。同じイメージから、複数のコンテナを起動することもできます。
コンテナを停止したら、中の状態はどうなるの?
停止しただけであれば、コンテナ自体は残っており、後から再開できます。完全に消したい場合は、停止に加えて「削除」という操作が別に必要です。今回はこの違いも確認します。
公開イメージ(nginx)を取得してコンテナとして起動し、ブラウザでアクセスする。起動中のログを確認したうえで、コンテナを停止・削除するまでの基本操作をひととおり体験する。
つくる流れ
「取得する」→「起動する」→「観察する」→「片付ける」という、コンテナ操作の基本サイクルを体験します。
要件
以下の要件を満たし、コンテナの基本操作を体験してください。
| No | 要件 |
|---|---|
| 1 | Docker Desktopをインストールして起動し、docker --version でバージョンが表示されることを確認する。 |
| 2 | 公開イメージ nginx を取得(pull)する。 |
| 3 | 取得したイメージからコンテナを起動し、ブラウザでアクセスして既定のページが表示されることを確認する。 |
| 4 | 起動中のコンテナの一覧と、ログの内容を確認する。 |
| 5 | コンテナを停止し、削除する。削除後、一覧に表示されなくなることを確認する。 |
構築の進め方
「Docker Desktopを準備する」→「イメージを取得して起動する」→「状態を観察する」→「停止・削除する」という順番で進めます。
- フェーズ1 — Docker Desktopを準備する
-
Docker Desktopをインストールし、起動する
お使いのパソコンにDocker Desktopをインストールし、起動します。起動が完了したら、ターミナル(PowerShellなど)を開き、次のコマンドでバージョンが表示されることを確認します。
docker --version
- フェーズ2 — イメージを取得して起動する
-
公開イメージ(nginx)を取得する
次のコマンドで、Webサーバーの公開イメージを取得します。
docker pull nginx
-
コンテナを起動する
取得したイメージから、名前を付けてコンテナを起動します。パソコンの8080番ポートを、コンテナの80番ポートにつなぎます。
docker run --name my-first-nginx -d -p 8080:80 nginx
ブラウザで
http://localhost:8080を開き、「Welcome to nginx!」のページが表示されることを確認します。 - フェーズ3 — 状態を観察する
-
起動中のコンテナを確認する
docker ps
一覧に
my-first-nginxが表示され、ステータスが起動中になっていることを確認します。 -
ログを確認する
docker logs my-first-nginx
ブラウザでアクセスした際のリクエストの記録が、ログに残っていることを確認します。
ブラウザをもう一度開いてみるログを確認した後にブラウザで再度アクセスし、もう一度
docker logsを実行すると、新しい行が追加されていることが分かります。 - フェーズ4 — 停止・削除する
-
コンテナを停止し、削除する
docker stop my-first-nginx docker rm my-first-nginx
停止と削除を分けて実行している点に注目してください。停止だけでは、コンテナは一覧(
docker ps -a)に残ったままです。これがゴールdocker ps -aを実行し、my-first-nginxが一覧から消えていることを確認できたら、このハンズオンの目的は達成です。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。
「docker runを実行すると、ポートに関するエラーが表示される」
パソコンの8080番ポートが、別のアプリケーションで既に使われていないかを見直しましょう。-p オプションのホスト側の番号(左側)を別の番号に変えることでも解決できます。
「http://localhost:8080 を開いても何も表示されない」
Docker Desktopがきちんと起動しているか、docker ps でコンテナのステータスが起動中になっているかを見直しましょう。
完了チェック
要件の再確認ではなく、画面・ターミナルのどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。
docker --versionでバージョン番号が表示される。- ブラウザで
http://localhost:8080を開くと、nginxの既定ページが表示される。 docker psの一覧に、起動中のコンテナ名が表示される。docker logsの出力に、ブラウザからのアクセス記録が表示される。docker rm実行後、docker ps -aの一覧からコンテナが消えている。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- 同じイメージから、もう1つコンテナを同時に起動しようとすると、何が起きるでしょうか。
ヒント
コンテナ名やポート番号を今回と同じ値のまま指定した場合、何と何が重複してしまうか考えてみましょう。 - コンテナの「停止」と「削除」を、わざわざ別の操作にしているのはなぜでしょうか。
ヒント
一時的に止めておいて後で同じ状態から再開したい場合と、完全に消してしまいたい場合、それぞれの場面を想像してみましょう。 - 「同じイメージなら、どのパソコンでも同じように動く」と言われるのはなぜでしょうか。
ヒント
イメージの中に何が含まれているか(アプリケーション本体だけか、それ以外も含むか)という観点で考えてみましょう。
後片づけ
本編の中で削除し忘れたものがあれば、ここで確認します。
- コンテナを削除する:本編のフェーズ4で削除済みの場合は不要です。
docker ps -aで残っていないか確認してください。 - 不要であればイメージも削除する:今後使わない場合は、
docker rmi nginxで取得したイメージを削除できます。 - Docker Desktopについて:次のハンズオンでも使うため、終了せずそのままにしておいて構いません。
コストに関する注意: このハンズオンではAWSのリソースを作成していないため、料金はかかりません。Docker Desktopは個人利用や小規模なチームでの利用では無料ですが、一定規模以上の組織での利用には別途ライセンスが必要になる場合があります。組織で利用する場合は、Docker社の利用規約を確認してください。