はじめに
はじめに これまでDockerで仮想環境を作成して開発環境を簡単に構築する方法をまとめてきましたが、実際のサービスとしてプログラミング開発を行うとなった場合にコンテナ一つで進めるのはまれです。 例えば、このブログは[…]
今回は複数のserviceを定義して、複数のコンテナを同時に起動する方法についてまとめていきます。
Windows10
Docker Desktop
Dockerについて
そもそものDockerについて、またインストール方法は以下の記事で紹介しています。
はじめに プログラミングを行う際に実行環境を構築する必要がありますが、普段利用しているローカルPCに直接インストールしてしまっては、トライアンドエラーを繰り返すうちに不要なアプリケーションが積み重なり動作が不安定にな[…]
はじめに Windows環境でLinuxのコマンドが利用できるWSL2についてインストールおよび利用方法を説明します。 Linuxコマンドが使えるようになると、様々なプログラミング言語や開発に利用できますので非常に[…]
docker-composeで複数サービスを起動する例
docker-composeを用いて複数のサービスを構成する例として、本ブログでも利用しているWordPressを上げたいと思います。
WordPressはブログなどを扱うCMSでWEBアプリケーションの一種です。そのため、WordPressを構成するミドルウェアとして、WEBサーバー、アプリケーションサーバー、DBサーバーが必要になります。
WEBサーバーはブラウザからアクセスされた際にアプリケーションサーバーへ内容を転送して処理を行ってもらい、その結果をまたブラウザへ返す役割があります。Apacheやnginxなどが代表的です。
アプリケーションサーバーではWordPressを構成するプログラムコードが格納されています。WordPressはPHPで動いています。
最後にDBサーバーはMySQLやMongoDBなど様々な種類があります。
今回は、WordPressとMySQLが提供している公式イメージを利用してそれぞれサービスを起動したいと思います。
フォルダ構成
今回の例では以下のようなファイル構成となっています。
docker-compose-wp/
|-- docker-compose.yml
`-- db_data/
docker-compose.ymlを作成する
今回は、WordPress、MySQLともに公式イメージをそのまま利用するためDockerfileは作成していません。
docker-compose.ymlの内容は以下のようになります。
version: "3"
services:
mysql:
image: mysql:8.0.31
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- mysql
image: wordpress:php8.1-apache
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
前回説明した部分は省略して、新しいところのみを解説します。
まずmysqlのserviceについて、
image:で取得するdocker imageを指定します。前回はDockerfileから作成したので、build:でしたがイメージをそのまま持ってくる場合はimage:となります。
今回はMySQLの8.0.31のイメージを選択しています。
enviroment:はコンテナに与える環境変数を定義することができます。例えば10行目の「MYSQL_ROOT_PASSWORD: wordpress」は環境変数MYSQL_ROOT_PASSWORD:にwordpressという文字列を設定するという意味になります。
MYSQLコンテナでは、DB構築に必要な情報を環境設定に保持するのでこのように設定しています。また、別のコンテナからDBに接続する際もこの情報を利用する必要があります。
次にwordpressのserviceについてですが、
depends_on:で起動順序を定義しています。WordPressはDBに接続する必要があるため、起動順序としては、MySQL⇒WordPressとなります。そのため、先に起動する必要があるservice名を定義します。
ただし、これはコンテナが起動する順番を決めているだけでMySQLが完全に起動してからWordPressが起動するわけではありません。
最後に、volumes:でMySQLのデータ部分をコンテナの外に保存できるようにしています。何度か書いていますが、コンテナは基本的に使い捨てのため、永続的に保存したいデータについてはコンテナの外に保存する必要があります。
コンテナの起動
それでは作成したdocker-compose.ymlからコンテナを起動します。
今回は、Dockerfileによるbuildが必要ないのでイメージ作成のコマンドdocker-compose buildは不要です。
docker-compose up -d
コンテナが起動したか確認してみましょう。
docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
docker-compose-wp-mysql-1 "docker-entrypoint.s…" mysql running 3306/tcp, 33060/tcp
docker-compose-wp-wordpress-1 "docker-entrypoint.s…" wordpress running 0.0.0.0:80->80/tcp
mysqlとwordpressのコンテナが起動していることが確認できました。
WordPressの起動確認
コンテナが起動できたことを確認したら、ブラウザで以下のURLにアクセスしましょう。
http://localhost/
下記の画像のようにWordPressの初期設定画面が表示されるかと思います。
もしかしたら、下記の画像が表示される可能性があります。
これは、DBサーバーであるMySQLが完全に起動していないうちからアクセスしたため発生しています。
上のdocker-compose.ymlの構成説明でもあったようにdepends_on:で起動順序を定義しても完全に起動するのを待つわけではないことがわかります。
また、volumes:で指定したフォルダ./db_dataにもMySQLのファイルができていることが確認できます。
まとめ
出版社:技術評論社
出版社:日経BP
出版社:インプレス