このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】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」で定義した内容の意味は下表のとおりです。
要素 | 意味 |
---|---|
version | Docker Composeのバージョンを指定する。ここでは「3」が指定されている。現在は公式ドキュメントでも記述しないことが推奨されています。 |
services | サービスの定義を開始するセクション。 |
apache | サービスの名前を指定する。ここではApacheのWebサーバーコンテナを指す。 |
image | コンテナに使用するDockerイメージを指定する。 |
httpd:2.4 | Apache HTTP ServerのDockerイメージ「httpd」のバージョン「2.4」を指定する。 |
ports | コンテナのポートのマッピングを指定する。ホストのポートとコンテナのポートを結びつける。 |
“80:80” | ホストのポート80をコンテナのポート80にマッピングする。 |
このYAMLファイルのセクションごとに意味を解説すると、Docker Composeのバージョンが「1.0」であることが指定され、サービスの定義が始まります。サービス名「apache」が定義され、そのサービスにはApache HTTP ServerのDockerイメージ「httpd:2.4」が使用されます。また、ホストのポート80をコンテナのポート80にマッピングするポートの設定も行われています。
この続きは「Docker Composeを使ってみる②」で解説していきます。