Docker Composeとは
Docker Hubのオフィシャルイメージを使ったLAMP環境構築でLAMP環境を構築することは出来たのですが、複数のコンテナの順番を意識して立ち上げなければならないので、手順書やシェルスクリプトなどを書く必要があり面倒です。
それを解決するためにDocker Composeというツールを使うことにしました。複数のコンテナを管理して、立ち上げる順番やコンテナに渡すパラメータを指定することができるツールです。
使ってみる
https://github.com/naga3/docker-lamp こちらに一式まとめてあります。
先にDockerとDocker Composeをインストールしておいてください。
Dockerのインストール
curl -fsSL https://get.docker.com/ | sh
参考: https://docs.docker.com/linux/step_one/
Docker Composeのインストール
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
参考: https://docs.docker.com/compose/install/
LAMP環境の起動
適当なディレクトリで
git clone https://github.com/naga3/docker-lamp.git
cd docker-lamp/
docker-compose up -d
これでLAMPを構成する複数のコンテナが自動的に立ち上がります。
ウェブブラウザでphpinfoの画面が出ることを確認してください。
ポートがぶつかる場合は、docker-compose.ymlのportsの左側の80を変更してください。
docker-compose.yml
使うコンテナやパラメータなどを記述した手順書です。YAML形式なのでインデントに注意してください。
version: '2'
services:
mysql:
build: ./mysql
environment:
MYSQL_ROOT_PASSWORD: pass
volumes:
- db:/var/lib/mysql
php:
build: ./php
ports:
- '80:80'
volumes:
- ./html:/var/www/html
depends_on:
- mysql
volumes:
db:
docker-compose.yml : mysqlサービス
build: ./mysql
mysql/Dockerfileの内容を元にイメージをビルドします。Dockerfileの内容については後述します。
environment:
MYSQL_ROOT_PASSWORD: pass
環境変数でMySQLのパスワードを指定します。docker runの-eオプションに対応します。
volumes:
- db:/var/lib/mysql
データベースの内容を永続化するために名前付きデータボリュームdb
を設定します。docker inspect
コマンドでデータボリュームの場所が分かります。
docker-compose.yml : phpサービス
build: ./php
php/Dockerfileの内容を元にイメージをビルドします。Dockerfileの内容については後述します。
ports:
- '80:80'
ホスト側の80番ポートとコンテナ側の80番ポートを結びつけます。
YAMLの60進数時刻フォーマットと誤認識しないようにクォーテーションで囲んでいます。
volumes:
- ./html:/var/www/html
ホスト側のhtml
ディレクトリをコンテナ側のドキュメントルートにマウントします。ここにコンテンツを置きます。
depends_on:
- mysql
phpサービスがmysqlサービスに依存していることを示します。これによりmysqlコンテナを先に立ち上げ、またphpコンテナ側からmysqlコンテナにアクセスできるようになります。
mysql/Dockerfile
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/
FROM mysql:5.7
Docker Hubの公式MySQLイメージをベースイメージとします。
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
ホスト側の./my.cnf
ファイルをコンテナ側の/etc/mysql/conf.d/
にコピーします。/etc/mysql/my.cnf
の最後にこのディレクトリをインクルードしているのでMySQL起動時に設定が反映されます。
mysql/my.cnf
[mysqld]
character-set-server=utf8
character setをUTF-8にしています。
php/Dockerfile
FROM php:7-apache
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libmcrypt-dev \
&& docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt
FROM php:7-apache
Docker Hubの公式PHPイメージをベースイメージとします。
COPY php.ini /usr/local/etc/php/
ホスト側にあるphp.iniをコピーしてコンテナ側のphp.iniとして設定します。
RUN apt-get update \
&& apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \
&& docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt
必要そうな拡張機能を導入します。docker-php-ext-install
はphp
イメージに含まれる拡張機能を導入するユーティリティです。
php/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
タイムゾーンとmbstringの日本語設定をします。