はじめに
docker-compose up
でコンテナ起動できるのは知っているけど、じゃあその定義はどうやるのか?という疑問から
前回に引き続き、今回も「自分でもやってみよう」という試み。
Docker Composeについて
Docker Composeとは
簡単に言うと、コンテナの作成や停止などの一連の操作をまとめて実行できるようにする仕組み。docker-compose.yml
という定義ファイルを用意し、読み込ませることで実行できる。
特に複数コンテナを連動させるアプリケーションを開発する際に便利。
Composeファイルを作成する
今回は「WordpressコンテナとMySqlコンテナを連動させる」ためのComposeファイルを作ってみる。
docker-compose.ymlファイルを作成する
type nul > docker-compose.yml
docker-compose.yml
の中身は下記のようにする。
今回は最低限の記述しかしていない。
version: '3.8'
services:
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpressdb
MYSQL_USER: hoge
MYSQL_PASSWORD: hogehoge
wordpress:
depends_on:
- mysql
image: wordpress
ports:
- 8080:80
restart: always
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: wordpressdb
WORDPRESS_DB_USER: hoge
WORDPRESS_DB_PASSWORD: hogehoge
冒頭のversion
はDocker Composeのバージョン(バージョンによって記法が違うことがあるので冒頭で指定する)。
services
に必要なコンテナを定義し、その中にコンテナごとの詳細を記述していく。
image
は起動するイメージ名、ports
はポート指定、
restart
は起動に失敗した際の再起動設定で、指定したalways
は再起動を繰り返す。
environment
は環境変数の設定。
接続するネットワークを指定したい場合はnetworks
を定義する。
wordpressのdepends_on
とは依存関係で、WordpressはMysqlに依存したサービスのため
必ずMysqlが先に起動・後に停止するように明示する。
イメージのダウンロード
docker-compose pull
することで、docker-compose.yml
に定義したサービスのイメージをまとめてpullできる。(※コンテナの起動はしない)
docker-compose pull
Pulling mysql ...
Pulling wordpress ...
pullするサービスを指定したい場合は docker-compose pull {service-name}
もちろん別途個別にpullしてもOK。
その際はdocker-compose.yml
に定義するイメージを
pullしたものに合わせて記述する。
コンテナを起動する
すべてのコンテナを起動する場合はdocker-compose up
-d
オプションはデタッチモード指定で、
バックグラウンドでコンテナを起動することができる。
するとdocker-compose.yml
に定義した順にサービスが実行され、コンテナが起動する。
docker-compose up -d
Creating network "docker-compose_default" with the default driver
Creating docker-compose_mysql_1 ... done
Creating docker-compose_wordpress_1 ... done
実行するサービスを指定してコンテナ起動させたい場合は docker-compose up -d {service-name}
サービスの稼働状態を確認する
State
がUp
になっていれば、問題なくコンテナが起動している。
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
docker-compose_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
docker-compose_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
WordpressにアクセスできればOK!
サービスを停止する
docker-compose stop
サービスを再起動するには、起動中であればrestart
停止中であればstart
docker-compose.yml
を再実行したい場合はup
サービスを終了する
docker-compose down
##error establishing a database connection対処方法
Wordpressにアクセスした際にerror establishing a database connection
(データベース確立エラー)になる場合は、
docker-compose.yml
で両サービスrestart: unless-stopped
に変更して試してみる。
※こちらの記事を参考にしました
docker-compose wordpress mysql connection refused - Stack Overflow
お疲れさまでした!