このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】バインドマウントでWordPressコンテナの構築①
ここでは、バインドマウント機能を用いて、WordPressコンテナを構築していきます。
「WordPressコンテナの構築①」と「WordPressコンテナの構築②」で構築したWordPressコンテナは、データを永続化する方法として、ボリュームという機能を使いました。
ボリューム機能を使ったWordPressコンテナの作成は、以下のリンク先で解説しています。
ボリューム機能を用いたWordPressコンテナのイメージは下図のとおりです。
ボリューム機能を用いた構成
コンテナのデータを永続させるには、ボリューム機能を用いる方法と、バインドマウントという機能を用いる方法があります。
ここでは、下図のような構成で、バインドマウント機能を用いてWordPressコンテナを構築します。
バインドマウント機能を用いた構成
「バインドマウントでWordPressコンテナの構築」は次の2部に分けて解説します。
データを永続化する方法
データの永続化は、コンテナ内で生成されるデータを保持し、コンテナが停止または削除されてもデータが失われないようにするための重要な機能です。主なデータの永続化方法として、ボリューム機能とバインドマウント機能があります。
①ボリューム機能
Dockerのボリューム機能は、コンテナ内のデータをホストマシンのファイルシステムに格納する方法です。これにより、データはホストマシン上の特定の場所に保存され、コンテナが停止または削除されても保持されます。ボリュームは、コンテナの内部で管理されるため、ホストマシン上のディレクトリの内容を操作する必要はありません。
ボリュームを作成するには、「docker volume create
」コマンドを使用します。また、Docker Composeでは、「volumes
」セクションを使用してボリュームを定義することができます。
②バインドマウント機能
バインドマウント機能は、ホストマシンのディレクトリをコンテナにマウントする方法です。これにより、ホストマシンのディレクトリとコンテナ内のディレクトリが同期され、データの永続化が実現されます。バインドマウントは、ホストマシン上のファイルシステムのパスを直接指定して、コンテナ内の特定の場所にマウントすることができます。
バインドマウント機能は、ホストOSのフォルダにマウントされるのでホスト側のフォルダの内容がコンテナ側に反映されます。つまり、ホスト上のフォルダの中のファイルを削除すれば、コンテナ内のデータも削除されることになります。
バインドマウントを使用する場合、ホストマシン上のディレクトリの権限やアクセス権などに注意する必要があります。
ホスト上でファイルを編集したい場合などに便利です。
バインドマウント機能の利用場面としては、開発環境をコンテナで用意して、ホスト側のローカルで開発作業を行うことなどが考えられます。
ボリューム機能とバインドマウント機能の違い
- ボリューム機能は、Dockerエンジンによって管理され、ホストマシン上の特定の場所に保存される。一方、バインドマウント機能は、ホストマシンのディレクトリを直接コンテナにマウントする。
- ボリュームは、Dockerエンジンによって作成され、削除され、管理される。バインドマウントは、ユーザーが手動でホストマシン上のディレクトリを指定し、削除する必要がある。
- ボリュームは、ホストマシン上のディレクトリと直接関連付けられているわけではなく、Dockerエンジンによって管理されるため、コンテナが異なるホストマシン上で実行されてもデータを共有できる。一方、バインドマウントは、ホストマシン上の特定のディレクトリに依存し、そのディレクトリが存在しない場合や異なるホストマシン上で実行される場合に問題が発生する可能性がある。
データの永続化の選択肢として、ボリューム機能とバインドマウント機能の両方があります。どちらを選択するかは、環境や要件によって異なります。
バインドマウント機能を用いたWordPressコンテナの作成
ボリューム機能とバインドマウント機能の違いが理解できたところで、バインドマウント機能を用いたWordPressコンテナを作成していきます。
「WordPressコンテナの構築①」で使用した「compose.yaml」の内容を少し修正して使用していきます。「WordPressコンテナの構築①」で解説した内容と重複するところがありますが、復習の意味を兼ねて、加筆しながら、解説していきます。
構築するWordPressコンテナを改めて確認します。下図のようにWordPressコンテナとホストマシンのディレクトリ「./html」ディレクトリをバインドマウントさせます。
WordPressはデータの保存先としてデータベースが必要です。今回もデータベースには、MariaDBを使います。
WordPressコンテナとMariaDBコンテナで使用する環境変数の定義も同じものを使います。
WordPressの主な環境変数
以下の表は、WordPressの主な環境変数です。
環境変数 | 説明 |
---|---|
WORDPRESS_DB_HOST | WordPressが接続するデータベースのサービス名を指定します。 |
WORDPRESS_DB_NAME | WordPressが使用するデータベースの名前を指定します。データベースが事前に作成されている必要があります。 |
WORDPRESS_DB_USER | WordPressがデータベースに接続する際のユーザー名を指定します。このユーザーには、指定されたデータベースへのアクセス権限が必要です。 |
WORDPRESS_DB_PASSWORD | WordPressがデータベースに接続する際のパスワードを指定します。このパスワードは、指定されたユーザーのパスワードと一致する必要があります。 |
これらの環境変数は、WordPressがデータベースに接続する際に必要な情報をです。データベースのホスト、名前、ユーザー、パスワードを正確に指定することで、WordPressが正常にデータベースに接続し、動作することができます。
MariaDBの主な環境変数
以下は、MariaDBコンテナの作成時に定義する一般的な環境変数の一部です。これらの環境変数は、コンテナの動作や設定をカスタマイズするために使用されます。
環境変数 | 説明 |
---|---|
MARIADB_ROOT_PASSWORD | ルートユーザーのパスワードを設定します。 |
MARIADB_DATABASE | 初期データベースを作成します。 |
MARIADB_USER | 初期ユーザーを作成します。 |
MARIADB_PASSWORD | 初期ユーザーのパスワードを設定します。 |
compose.yamlの定義
定義する「compose.yaml」の定義は次のようになります。
services:
wpdb:
image: mariadb:10.8
environment:
MARIADB_ROOT_PASSWORD: root-pass
MARIADB_DATABASE: database
MARIADB_USER: wp-user
MARIADB_PASSWORD: wp-pass
volumes:
- db-data:/var/lib/mysql
wordpress:
image: wordpress:6.5
depends_on:
- wpdb
environment:
WORDPRESS_DB_HOST: wpdb
WORDPRESS_DB_NAME: database
WORDPRESS_DB_USER: wp-user
WORDPRESS_DB_PASSWORD: wp-pass
ports:
- "80:80"
volumes:
- ./html:/var/www/html #ボリューム名ではなくディレクトリ名にする。
volumes:
db-data: #WordPress用のボリュームは用意しない。
compose.yamlの定義内容
services:
wpdb:
image: mariadb:10.8
environment:
MARIADB_ROOT_PASSWORD: root-pass
MARIADB_DATABASE: database
MARIADB_USER: wp-user
MARIADB_PASSWORD: wp-pass
volumes:
- db-data:/var/lib/mysql
wordpress:
image: wordpress:6.5
depends_on:
- wpdb
environment:
WORDPRESS_DB_HOST: wpdb
WORDPRESS_DB_NAME: database
WORDPRESS_DB_USER: wp-user
WORDPRESS_DB_PASSWORD: wp-pass
ports:
- "80:80"
volumes:
- ./html:/var/www/html
volumes:
db-data:
定義内容の解説
「compose.yaml」ファイルの定義を解説しています。
サービス名 | wpdb |
---|---|
イメージ | mariadb:10.8 |
環境変数 | MARIADB_ROOT_PASSWORD: root-pass |
MARIADB_DATABASE: database | |
MARIADB_USER: wp-user | |
MARIADB_PASSWORD: wp-pass | |
ボリューム | db-data:/var/lib/mysql |
サービス名 | wordpress |
---|---|
イメージ | wordpress:6.5 |
依存関係 | wpdb |
環境変数 | WORDPRESS_DB_HOST: wpdb |
WORDPRESS_DB_NAME: database | |
WORDPRESS_DB_USER: wp-user | |
WORDPRESS_DB_PASSWORD: wp-pass | |
ポートフォワード | "80:80" ホストとコンテナのポート番号の関連付け |
ボリューム | wp-data:/var/www/html |
ボリューム名 | 説明 |
---|---|
db-data | ・wpdbにマウントするボリューム MariaDBのデータボリュームは db-data:/var/lib/mysql でマウントされます。 |
このDocker Composeファイルの定義で、MariaDBとWordPressのコンテナがそれぞれ環境変数を通じて必要な設定情報を受け取ります。具体的には、MariaDBコンテナにはルートパスワード、データベース名、ユーザー名、ユーザーパスワードが与えられ、WordPressコンテナにはデータベースへの接続情報が与えられます。
また、それぞれのコンテナが使用するデータボリュームも定義されており、MariaDBのデータボリュームは「db-data」ボリュームにマウントされ、WordPressのデータボリュームは、ホストのディレクトリ「./html」にバインドマウントされます。
この定義を使用することで、WordPressとMariaDBのコンテナを簡単に構築し、それらを連携させることができます。また、定義には依存関係やポートのフォワーディングなどが含まれており、複数のサービスを一括して管理することができます。
バインドマウントの定義
バインドマウントの定義は、「services」下の「volumes」セクションにホストOSのディレクトリとコンテナ内のパスを紐づけを定義します。その際、「volumes」下の定義は不要です。
services:
凵凵サービス名:
凵凵凵凵image:凵使用するイメージ名:タグ名
凵凵凵凵volumes:
凵凵凵凵凵凵-凵ホストOSのディレクトリ名:コンテナ内のパス
※「凵」は半角スペースを表しています。
依存関係の定義
このDocker Composeファイルの定義では、WordPressサービスがMariaDBサービスに依存しています。依存関係は以下のように定義しています。
wordpress:
凵凵depends_on:
凵凵凵凵-凵wpdb
※「凵」は半角スペースを表しています。
上の部分が依存関係を表しており、WordPressサービスが起動する前に、wpdb(MariaDBサービス)が起動することを要求しています。
WordPressはデータベースに接続しないと使用できません。
この依存関係を定義することで、WordPressとMariaDBの関係性が明確になり、Docker Composeがサービスの起動順序を管理しやすくなります。WordPressがMariaDBに依存していることが明示されるため、サービス間の相互関係がより明確になります。
ここまで、解説が少々長くなりましたので、次の「バインドマウントでWordPressコンテナの構築②」でバインドマント機能を用いたWorpPressコンテナを構築していきます。