このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker Composeを使ってみる①

Docker Composeを使ってWebサーバーのコンテナを作成します。

「Docker Composeを使ってみる」は、2部に分けて解説していきます。

手順1:作成するコンテナの情報を整理する。

まず、作成するコンテナの情報を整理します。

 Docker Composeを使用してWebサーバーのコンテナを作成するためには、最初にWebサーバーソフトウェアの選定が必要です。一般的に使用されるWebサーバーソフトウェアには、NginxとApacheがあります。

 ApacheとNginxは、両方とも人気のあるWebサーバーソフトウェアですが、今回はApacheでコンテナを作成します。Apacheは、Webサーバーとしての長い歴史と安定性があり、多くの企業や組織で広く使用されています。

ApacheのDockerイメージ

 ApacheのDockerイメージは、公式のApache HTTP Serverリポジトリから提供されています。イメージ名は「httpd」となります。このイメージを使用することで、ApacheのWebサーバーソフトウェアが実行されたコンテナを作成することができます。nginxのDockerイメージはnginxですが、Apacheは「httpd」なので注意してください。

コンテナの作成に必要な情報

 コンテナの作成に必要な情報は、下表となります。Apacheには、2.2系と2.4系の2系統(2種類)がありますが、2.4系のイメージを使用することにします。

必要な項目設定値
使用するイメージhttpd、バージョン2.4
ポート番号80:80
コンテナの作成に必要な情報

手順2:Docker Composeファイルの作成

・ディレクトリの作成と移動

Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。

 デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。

・「cd desktop/docker」コマンドを実行します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

 「compose.yaml」ファイルを保存する「apache」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir apache」コマンド
  • 「cd apache」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir apache

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/03/30    16:29                apache

PS C:\Users\joeac\Desktop\docker> cd apache
PS C:\Users\joeac\Desktop\docker\apache>
・VSCodeの起動

VSCodeで「compose.yaml」ファイルを作成します。

・「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\apache> code compose.yaml

VSCodeが起動します。

・「compose.yaml」ファイルの編集

・「compose.yaml」ファイルを以下のように編集して保存します。

version: '3'

services:
  apache:
    image: httpd:2.4
    ports:
      - "80:80"
・YAML形式

YAML形式は、インデントを使って階層構造を表します。

 キーの後の「:」や「ー」の後に半角スペース「凵」が必要なので注意してください。「httpd:2.4」のようにイメージのバージョンを指定する場合は、逆に半角スペース「凵」を入れるとエラーになります。

階層構造には癖があるので、サンプルの記述を参考にするとよいです。

version:凵'3' ←省略が推奨されている

services:
凵凵apache:
凵凵凵凵image:凵httpd:2.4
凵凵凵凵ports:
凵凵凵凵凵凵-凵"80:80"

※Docker Composeのバージョンを指定する。「version ‘3’」を指定していますが、こちらは現在、公式ドキュメントでも記述しないことが推奨されています。

YAML形式について、詳しく解説します。

 YAML形式は、人間が読みやすく、コンピュータが解釈しやすいテキストベースのデータ形式です。YAMLでは、インデント(字下げ)を使用して階層構造を表現します。正しいインデントを使用することで、データの階層関係や構造が明確になり、正しく解析されます。一方で、インデントの過不足があると、YAMLパーサーがエラーを報告します。

具体的に解説すると、以下のような点が重要です。

1.階層構造の表現

 YAMLでは、データの階層構造を表現するために、インデントを使用します。階層が深くなるにつれて、インデントの量も増えます。これにより、親子関係やグループ化されたデータの関連性が明確になります。

2.半角スペースの数

 YAMLでは、インデントに半角スペースを使用します。一般的には、2つのスペースまたは4つのスペースが1つのインデントとして使用されます。しかし、スペースの数は統一されている必要があり、過不足があると構文エラーが発生します。

3.タブの使用

 YAMLでは、インデントにタブ文字を使用することは許可されていません。タブ文字は、異なる環境やエディタで解釈される方法が不安定であり、意図しない結果をもたらす可能性があります。そのため、常に半角スペースを使用してインデントを行います。

4.ブロックスタイルとフロースタイル

 YAMLでは、データを表現する際に、ブロックスタイルとフロースタイルの2つのスタイルがあります。ブロックスタイルでは、改行とインデントを使用して階層構造を表現します。一方、フロースタイルでは、改行やインデントを省略して、よりコンパクトにデータを表現します。

 正しいインデントの使用は、YAMLファイルの可読性と正確性を確保する上で非常に重要です。適切なインデントを使用して、データの構造を明確に表現し、エラーを回避することが求められます。

「compose.yaml」で定義した内容

「compose.yaml」で定義した内容の意味は下表のとおりです。

要素意味
versionDocker Composeのバージョンを指定する。ここでは「3」が指定されている。現在は公式ドキュメントでも記述しないことが推奨されています。
servicesサービスの定義を開始するセクション。
apacheサービスの名前を指定する。ここではApacheのWebサーバーコンテナを指す。
imageコンテナに使用するDockerイメージを指定する。
httpd:2.4Apache HTTP ServerのDockerイメージ「httpd」のバージョン「2.4」を指定する。
portsコンテナのポートのマッピングを指定する。ホストのポートとコンテナのポートを結びつける。
“80:80”ホストのポート80をコンテナのポート80にマッピングする。
「compose.yaml」の意味

 このYAMLファイルのセクションごとに意味を解説すると、Docker Composeのバージョンが「1.0」であることが指定され、サービスの定義が始まります。サービス名「apache」が定義され、そのサービスにはApache HTTP ServerのDockerイメージ「httpd:2.4」が使用されます。また、ホストのポート80をコンテナのポート80にマッピングするポートの設定も行われています。


この続きは「Docker Composeを使ってみる②」で解説していきます。

関連コンテンツ