Vol.0 開発環境構築 を完了していること
この章では、開発環境として Docker コンテナを利用する際に知っておくべき基本的な概念を説明します。
「Docker コンテナ = 使い捨てのアプリケーション実行環境」と考えてください。 Docker イメージと言われるテンプレートからコンテナを起動し、その中でアプリケーションを実行します。
「Docker イメージ = コンテナの設計図」と考えてください。 プログラムでいうところのクラスのようなもので、イメージからコンテナを起動(インスタンス化)します。 Docker イメージ自体は、 Dockerfile というファイルから生成されます。
「Dockerfile = コンテナの構築手順書」と考えてください。 プログラムでいうところのソースコードです。どのようにアプリケーション実行環境を構築するかを記述します。

本シリーズの最終目標は Dev container を使った開発環境構築ですが、その前提として Docker コンテナの基本的な使い方を学びます。
今回は Apache HTTP Server コンテナを使って、Web サーバコンテナを動かしてみましょう。
次のような実行結果が表示されたと思います。これで Apache HTTP Server コンテナが起動します。
ただし、コンテナ環境は隔離された状態なので、ホスト OS からはアクセスできません。 いったん Ctrl + C でコンテナを停止しましょう。
ホスト OS からコンテナにアクセスするために、ポートフォワーディングを設定します。 ポートフォワーディング設定を行うことで、ホスト OS の特定のポートへのアクセスをコンテナ内の特定のポートに転送できます。
-p 8080:80: ホスト OS のポート 8080 をコンテナ内のポート 80 に転送する設定このように、ポートフォワーディング設定をすることで、ホストのポート 8080 から コンテナのポート 80(Apache HTTP Server) にアクセスできるようになります。
Web ブラウザで http://localhost:8080 にアクセスしてみましょう。
It works! と表示されたら成功です。

ポートフォワーディング設定でコンテナにアクセスできるようになりましたが、 このままではコンテナに手元の資材を持ち込むことができません。 それでは開発環境として不便ですので、バインドマウントという仕組みを使い、 手元の資材をコンテナに持ち込めるようにしましょう。
$(pwd): カレントディレクトリの絶対パスに展開される-v "$(pwd):/usr/local/apache2/htdocs": カレントディレクトリをコンテナ内の /usr/local/apache2/htdocs ディレクトリにマウントする設定コンテナを起動したら、再度 Web ブラウザで http://localhost:8080 にアクセスしてみましょう。
It works! の代わりに、カレントディレクトリのファイル一覧が表示されます。
これでカレントディレクトリをコンテナ上の Apache HTTP Server が参照していることが確認できました。

せっかくなのでファイルを作成し、 Apache HTTP Server から参照できることを確認してみましょう。
カレントディレクトリに index.html ファイルを作成し、次の内容を記述します。
ファイルが作成出来たら、再度 Web ブラウザで http://localhost:8080 にアクセスしてみましょう。
It's my created file! と表示されます。
Docker イメージの基本的な使い方は理解できたと思います。 次に、カスタム Docker イメージを作成してみましょう。
httpd イメージと同じように、 Apache HTTP Server を動作させるカスタム Docker イメージを作成します。
まず、カレントディレクトリに Dockerfile という名前のファイルを作成し、次の内容を記述します。
次に、カスタム Docker イメージをビルドします。 カレントディレクトリで、次のコマンドを実行します。
-t my-httpd:latest: ビルドするイメージに my-httpd:latest という名前を付ける.: カレントディレクトリにある Dockerfile を使用次に、 docker images コマンドで、ビルドしたイメージが作成されていることを確認します。
次のように my-httpd:latest イメージが表示されれば成功です。
最後に、ビルドしたカスタム Docker イメージを起動します。 次のコマンドを実行します。
-v "$(pwd):/var/www/html": カレントディレクトリをコンテナ内の /var/www/html ディレクトリにマウントする設定
(/var/www/html は Ubuntu ベースの Apache HTTP Server のデフォルトのドキュメントルート)再度 Web ブラウザで http://localhost:8080 にアクセスしてみましょう。
It's my created file! と表示されれば成功です。
これで、カスタム Docker イメージの作成と起動ができました。
Docker Compose は、複数の Docker コンテナをまとめて管理するためのツールです。 ひとつひとつのコンテナを、「サービス」として定義し、複数のサービスをまとめて「アプリケーション」として定義します。
本ワークショップでは、 Dev container を使った開発環境構築を見越して、「開発環境」と「Web サーバー環境」のふたつのサービスを定義してみましょう。
前述の通り、「開発環境」と「Web サーバー環境」のふたつのサービスを定義します。 サービスの内容としては、次の通りです。
それでは、サービス定義をしていきましょう。
カレントディレクトリに compose.yaml という名前のファイルを作成し、次の内容を記述します。

次に、 Docker Compose を起動します。 カレントディレクトリで、次のコマンドを実行します。
web サービスが動いているかを確認します。
Web ブラウザで http://localhost:8080 にアクセスしてみましょう。
It's my created file! と表示されれば成功です。
app サービスが動いているかを確認します。 app サービスに接続し、 curl コマンドで web サービスにアクセスしてみましょう。
次のコマンドで、 app サービスに接続します。
接続ができたら、次のコマンドで web サービスにアクセスします。
It's my created file! と表示されれば成功です。
http://web の web は、compose.yaml で定義したサービス名です。Docker Compose では、サービス名がそのままホスト名として名前解決されます。
app サービスと web サービスのふたつのサービスを定義し、動作確認まで行いました。 今回は app サービスに curl コマンドをインストールしましたが、実際の開発環境では Java や Node.js などの開発ツールをインストールします。
サービスの動作確認ができたら、 Docker Compose を停止します。 カレントディレクトリで、次のコマンドを実行します。
今回は、 Docker コンテナの基本的な使い方と Docker Compose の基本的な使い方を学びました。 次回は、この知識を活かして、 Dev container を使った開発環境構築を学びます。