Docker for MacとDocker ComposeでささっとLAMP環境を作る
色々とDockerは便利ですよね(大雑把)。
私は「ちょっとこれを動かしたい」とか思った時にサクッとLAMP環境作って破棄するってのをよくやります。
よく周りに私が使っている「ささっとDockerでLAMP環境構築セット」を勧めるんですが、README的なものが無かったので、今更ですがここにまとめていきたいと思います。
事前準備
Docker for Mac
そもそもDockerが入ってない場合は、Docker for Macでインストールしてみてはどうでしょうか。
docker、docker-compose、docker-machine等の一通り必要なものを揃えることが出来ます。
使用するコンテナ
WEBサーバとDBサーバ、計2つのコンテナを使用してLAMP環境を構築していきます。
-
WEBサーバ
Docker HubにあるPHPの公式リポジトリ: php:7.1-apache -
DBサーバ
Docker HubにあるMySQLの公式リポジトリ: mysql:5.7
上記の2コンテナをまとめて管理する為、Docker Composeを使用します。
LAMP環境構成
下記の構成で環境構築を行っていきます。
もちろんPHPやMySQLのバージョンは、色々変えられます。
- Debian 8.8
- Apache 2.4.10
- PHP 7.1.5
- mysql 5.7.18
ディレクトリ構成
人それぞれ、色々なやり方が有るとは思いますが、
私の場合は大きく3つのディレクトリで区切っています。
$ tree -L 2
.
└── web -> WEBサーバ用ディレクトリ
│ ├── Dockerfile
│ ├── base.conf -> Apacheの設定ファイル
│ └── php.ini
├── db -> DBサーバ用ディレクトリ
│ ├── Dockerfile
│ ├── my.cnf
│ └── mysql_data -> MySQLのデータ格納用ディレクトリ
├── docker-compose.yml
└── html -> 作業ディレクトリ
各設定ファイル
各設定ファイルをさらっと説明していきます。
./docker-compose.yml
version: '2'
services:
db:
build: ./db
volumes:
- ./db/mysql_data:/var/lib/mysql -> (1)
environment:
MYSQL_ROOT_PASSWORD: 'password' -> (2)
web:
build: ./web
ports:
- '8080:80' -> (3)
volumes:
- ./html:/var/www/html -> (4)
depends_on:
- db
- 通常、MySQLのコンテナを削除するとデータも消えてしまう為、volumeオプションを使用してローカルのmysql_dataディレクトリにデータを残すようにします
- MySQLのrootユーザの設定もここで行っているので、適宜
password
を設定してください - port:8080をDockerのport:80に紐付けてますが、適宜変更してください
- html配下をドキュメントルートにしています
./web/Dockerfile
WEBサーバの設定ファイルです。
Docker HubにあるPHPの公式リポジトリ: php:7.1-apacheを使用します。
FROM php:7.1-apache
MAINTAINER docker-web
RUN apt-get update \
&& apt-get -y install vim wget lsb-release libicu-dev mysql-client libfreetype6-dev libjpeg62-turbo-dev libpng12-dev \
&& docker-php-ext-install pdo_mysql mysqli intl gd
RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
RUN ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled
RUN echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf && a2enconf fqdn
COPY ./base.conf /etc/apache2/sites-available/base.conf
RUN a2ensite base.conf
COPY ./php.ini /usr/local/etc/php/
./web/base.conf
Apacheの設定ファイルです。
<VirtualHost *:80>
ServerName localhost
ServerAlias *.*.localhost
VirtualDocumentRoot "/var/www/html/%2/%1"
</VirtualHost>
<VirtualHost *:80>
ServerName localhost
ServerAlias *.localhost
VirtualDocumentRoot "/var/www/html/%1"
</VirtualHost>
./web/php.ini
PHPの設定ファイルです。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese
./db/Dockerfile
DBサーバの設定ファイルです。
Docker HubにあるMySQLの公式リポジトリ:mysql:5.7を使用します。
FROM mysql:5.7
MAINTAINER docker-db
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
./db/my.cnf
MySQLの設定ファイルです。
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql
環境構築方法
コンテナをビルドする
$ docker-compose build
コンテナを起動する
$ docker-compose up -d
コンテナの起動を確認する
WEBとDBコンテナのステータスがUp
になっていることを確認します。
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------
docker_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
docker_web_1 docker-php-entrypoint apac ... Up 0.0.0.0:8080->80/tcp
ブラウザでアクセスする
今回作成したWEBサーバは、サブドメインでドキュメントルートを切り替えられるようにしています。
例えば、./html/sample
をドキュメントルートにしたい場合は、
ブラウザからhttp://sample.localhost:8080
でアクセスします。
また、./html/sample/public
をドキュメントルートにしたい場合は、
http://public.sample.localhost:8080
でアクセスします。
この辺りの設定は、./web/base.conf
に記載されています。
Discussion