Docker Desktop で 開発用 Web アプリを起動してみよう

この記事では、できる限りコマンドラインを使わず
Docker で Web アプリケーションを起動して、
Docker の基本的な利用法を理解していきます。

この 10 分程度のトレーニングを終えれば、
もう開発のためにデータベース・アプリケーションをインストールする必要はありません。

実用から入る Docker 講座 目次に戻る

Docker Desktop Dashboard を開いてみよう

Docker を操作したとき、何が起きるかわかりやすいように
Docker Desktop の Dashboard を開いておきましょう。

常駐している Docker Desktop のアイコンを右クリック → [Dashboard] をクリック:

常駐している Docker Desktop のアイコンを右クリック → [Dashboard] をクリック
常駐している Docker Desktop のアイコンを右クリック → [Dashboard] をクリック

すると、次のようなウィンドウが開きます:

Docker Desktop Dashboard
Docker Desktop Dashboard

Docker を使って Web アプリを起動してみよう

いきなりですが、Docker で Web アプリケーションを動かします。

“test-docker” というフォルダーを新規作成し、
“docker-compose.yml” というファイルを新規作成し、次の内容を記述します:

version: "3.8"
services:
  web:
    image: adminer
    ports:
      - 8080:8080
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

このファイルの内容については次の記事で解説しますが、
効率的に理解するために、まずこのトレーニングをすすめることをお奨めします。

そして、ファイルを作成したフォルダーでターミナルを開き、次のコマンドを実行します:

docker-compose up -d

すると、次のような出力が表示されます:

Creating network "test-docker_default" with the default driver
Pulling web (adminer:)...
latest: Pulling from library/adminer
df20fa9351a1: Pull complete
b358d6dbbdff: Pull complete
0232d962484c: Pull complete
0c1d3ac04d2a: Pull complete
b4e4f852df7e: Pull complete
6a973c07b1a7: Pull complete
81925cc0eeeb: Pull complete
4fce6c58c125: Pull complete
56d61120c3e2: Pull complete
81694e37d7e8: Pull complete
63580de12c3c: Pull complete
5483478c2601: Pull complete
d75c0834e7af: Pull complete
b3b3fdd9c555: Pull complete
50a9fb45e1ec: Pull complete
Digest: sha256:dc0bb811b48d861c4e08f7d52db98b51768243a2a3f656edf698a8a9a3bc4dc4
Status: Downloaded newer image for adminer:latest
Pulling db (mysql:)...
latest: Pulling from library/mysql
6ec8c9369e08: Pull complete
177e5de89054: Pull complete
ab6ccb86eb40: Pull complete
e1ee78841235: Pull complete
09cd86ccee56: Pull complete
78bea0594a44: Pull complete
caf5f529ae89: Pull complete
cf0fc09f046d: Pull complete
4ccd5b05a8f6: Pull complete
76d29d8de5d4: Pull complete
8077a91f5d16: Pull complete
922753e827ec: Pull complete
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc
Status: Downloaded newer image for mysql:latest
Creating test-docker_web_1 ... done
Creating test-docker_db_1  ... done

Dashboard を確認すると、”test-docker” という行が表示されていますので、
行の中心あたりにマウスのカーソルを合わせクリックします:

行の中心あたりにマウスのカーソルを合わせクリック
行の中心あたりにマウスのカーソルを合わせクリック

すると、ログが表示され、左側に [CONTAINERS] という項目が表示されます:

ログが表示され、左側に [CONTAINERS] という項目が表示されます
ログが表示され、左側に [CONTAINERS] という項目が表示されます

ログに次の内容が表示されるまで待ちます:

db_1 | 2020-07-28T08:41:11.017766Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.

上記のログは 「MySQL」というデータベース・アプリケーションが起動したことを示しています。

確認してみましょう。
[CONTAINERS] 欄の “test-docker_web_1” という行にマウスのカーソルを合わせると
アイコンがいくつか表示されるので、
一番左の [OPEN IN BROWSER] をクリックします:

一番左の [OPEN IN BROWSER] をクリック
一番左の [OPEN IN BROWSER] をクリック

ブラウザーで Web ページが表示されましたか?:

Adminer ログイン画面
Adminer ログイン画面

Dashboardを確認すると、次のようなログが表示されています:

Attaching to test-docker_web_1
 [36mweb_1  | [0m [Tue Jul 28 05:05:06 2020] [::ffff:172.21.0.1]:49264 Accepted
 [36mweb_1  | [0m [Tue Jul 28 05:05:06 2020] [::ffff:172.21.0.1]:49262 Accepted
 [36mweb_1  | [0m [Tue Jul 28 05:05:07 2020] [::ffff:172.21.0.1]:49264 [200]: GET /
 [36mweb_1  | [0m [Tue Jul 28 05:05:07 2020] [::ffff:172.21.0.1]:49264 Closing

URL にアクセスしたので、レスポンスを返す処理が行われていることがわかります。

この Web アプリケーションは Adminer という無料の Web アプリケーションで、
ブラウザー越しにデータベースの管理をすることができます。

Adminer – Database management in a single PHP file

データベースにログインしてみましょう。
ブラウザーに表示されているログインフォームに次のように入力して [ログイン] ボタンをクリックします:

入力項目入力内容
[データベース種類]“MySQL”
[サーバ]db
[ユーザ名]“root”
[パスワード]“example”
[データベース]未入力

ログインすると、MySQL のデータベースの一覧が表示されます:

ログインすると、MySQL のデータベースの一覧が表示されます
ログインすると、MySQL のデータベースの一覧が表示されます

ファイルを 1 つ用意してコマンドを 1 つ実行するだけで
web アプリケーションとデータベース・アプリケーションを起動することができました。

用語を覚えよう

コンテナー

Dashboard の [CONTAINERS] に表示された各行を「コンテナー」と言います。
コンテナーは Docker によって構築される仮想環境です。

ホスト

Docker の話題の中では、「コンテナー」との対比として
「Docker を動かしているコンピューター自体」のことを「ホスト」といいます。
Docker Desktop を使っているときは、今使っている PC がホストです。

コンテナーを止めたり動かしたりしてみよう

今、ブラウザーではコンテナーのデータベースアプリケーションにログインしていますが、
それを確認するために、
データベースのコンテナーを止めてブラウザを再読み込みしてみましょう。

Dashboard からコンテナーを止めることができます。
“test-docker_db_1” にマウスのカーソルを合わせると表示されるアイコンの内、
[STOP] をクリックします:

[STOP] をクリックします
[STOP] をクリックします

※ “test-docker_web_1” と間違えないように気をつけましょう。

すると、コンテナーがグレーになり、”EXITED (0)” と表示されます。

コンテナーがグレーになり、"EXITED (0)" と表示されます
コンテナーがグレーになり、”EXITED (0)” と表示されます

この状態でブラウザーを再読み込みします。
すると、エラーメッセージが表示され、ログイン画面まで戻されてしまいます:

エラーメッセージが表示され、ログイン画面まで戻されてしまいます
エラーメッセージが表示され、ログイン画面まで戻されてしまいます

では、もう一度動かしてみましょう。
Dashboard で “test-docker_db_1” にマウスのカーソルを合わせると表示されるアイコンの内、
[SRART] をクリックします:

[SRART] をクリックします
[SRART] をクリックします

すると、再びコンテナーがグリーンになり、”RUNNING” と表示されます:

再びコンテナーがグリーンになり、"RUNNING" と表示されます
再びコンテナーがグリーンになり、”RUNNING” と表示されます

ブラウザのログインフォームで再度ログインすると
再び MySQL のデータベースの一覧が表示されます:

ログインすると、MySQL のデータベースの一覧が表示されます
ログインすると、MySQL のデータベースの一覧が表示されます

では、コンテナーを一度に停止してみましょう。
Dashboard 上部のフォルダー名が表示されている部分の右側にあるアイコンの内、
[STOP] をクリックします:

Dashboard 上部のフォルダー名が表示されている部分の右側にあるアイコンの内、 [STOP] をクリックします
Dashboard 上部のフォルダー名が表示されている部分の右側にあるアイコンの内、 [STOP] をクリックします

すると、すべてのコンテナーがグレーになり、”EXITED (0)” と表示されます:

すべてのコンテナーがグレーになり、"EXITED (0)" と表示されます
すべてのコンテナーがグレーになり、”EXITED (0)” と表示されます

この状態でブラウザーを再読み込みすると、
「このサイトにアクセスできません」と表示されます:

「このサイトにアクセスできません」
「このサイトにアクセスできません」

先ほどの [STOP] のすぐ左に [START] があることからわかる通り、
すぐにコンテナーを起動することができ、
データベースのデータも保持され続けます。

コンテナーを停止していると、Dashboard に表示され続けます。
もう利用せず、データベースのデータも必要ない場合は
削除した方が Dashboard の見渡しが良くなります。

では、コンテナーをすべて削除してみましょう。
[STOP] のすぐ右にある [DELETE] をクリックします:

[STOP] のすぐ右にある [DELETE] をクリック
[STOP] のすぐ右にある [DELETE] をクリック

すると、コンテナーはすべて削除され、
ディレクトリーが表示されている行も Dashboard からなくなります:

Docker Desktop Dashboard
Docker Desktop Dashboard

この場合は、
また “docker-compose up -d” コマンドでコンテナーを起動することができますが、
データベースのデータは引き継がれず、新たに初期化されます。

この時点では、実はまだデータベースのデータは失われていませんが、
この時点からデータの回収を行うのは面倒なので
バックアップはコンテナーを削除する前に行うようにしましょう。

アプリケーション開発ではデータを保存する必要はあまりないので、
これだけで十分に役立ってくれることでしょう。

Docker の Dashboard についてさっと確認しました。
次は最初に作成した docker-compose.yml の内容について見てみましょう:

docker-compose.yml の内容を理解しよう

実用から入る Docker 講座 目次に戻る

タイトルとURLをコピーしました