MAMP Proが動かなくなったのでこれを機会にdocker-compose で環境構築してみました。動作確認したのはMacのみです。
どうしてもphp5.6でないと動かないCMS案件(baserCMS3系)だったので、リライトやGDのインストールもやってみました。
(一応 php7.1も動かせます)
githubのデータはこちら → Garyuten/dockker-lamp-php5.6
この環境が向いてる人
- PHP5.6など古めホスティングサーバー案件の環境を作らないといけない人
- Apacheのリライトの設定やGDのインストールなどを後からコマンドでやりたくない人
- ホスティングサーバーっぽい構成のLAMP(apache,php,mysql)環境が欲しい人
この記事で構築される環境
- Apache
- mod_rewrite
- GD
- php 5.6.28 or php 7.1
- MySql 5.7
- PhpMyAdmin
動作確認したCMS
- php5.6.28
- ✅ baserCMS 3.0.16
- ✅ Wordpress 4.9.8
- php7.1
- ✅ baserCMS 4.1.3
- ✅ Wordpress 4.9.8
baserCMS3.0.16の場合 (php5.6.28)
baserCMS4.1.3の場合 (php7.1)
Wordpress4.9.8 の場合 (php7.1)
php7.1に切替えた後に確認(PHPのバージョン切替方法は後述)
事前準備
Dockerのインストール
Docker Composeのインストール
git クローン
git clone https://github.com/Garyuten/dockker-lamp-php5.6.git
もしくは githubからzipをダウンロード して作業フォルダで解凍してください
インストール・起動手順
$ cd dockker-lamp-php5.6
$ docker-compose build
$ docker-compose up
これだけで、 http://localhost:8080/ にアクセスできるようになります。
あとは/public_html/
配下に WordpressなりbaserCMSなり置けばインストールできます。
mod_rewrite が有効かどうかは、 http://localhost:8080/hoge にアクセスして「 ✅ mod_rewrite is ok! 」 の表示がでれば有効なことが確認できます。
docker-compose build
は初回のみ、かなり時間がかかります。気長に待ちましょう。
バックエンドでの起動方法
$ docker-compose up -d
ターミナルに出力されなくなります
docker終了方法
ターミナル(コンソール)上で Cmd + C
(以外に忘れる)
MySQLの接続情報
- database host : 192.168.202.2 (default)
- database user : root
- database pass : root
- database port : 3306
database host : 192.168.202.2
は変更可能です(後述)
###phpMyAdmin
http://localhost:8088/ でアクセスできます。
LAMPを動かすなら上記まででOK❗❗🙆
エラー: debconf: delaying package configuration, since apt-utils is not installed が出た場合
気にしなくていいらしいです。毎回でますが特に問題なく動いてます。
参考:"debconf: delaying package configuration, since apt-utils is not installed"を表示しないようにする - Qiita
これから先はファイルの説明になります。
ディレクトリ構成と各ファイルの説明
├ public_html : Document root
├ docker-compose.yml
└ docker
├ web
├ Dockerfile : php veersion, apache install
├ base.conf : <VirtualHost *:80>
├ php.ini
├ db
├ Dockerfile : mysql install
├ my.cnf
├ logs : server log
public_html
ドキュメントルートになります。 http://localhost:8080 でアクセスされる領域です。
.htaccess
も有効です。
docker-compose.yml
mysql を繋ぐためにIPアドレスを固定しています。
version: '2'
services:
mysql:
container_name: projectname_mysql
build: ./docker/db
volumes:
- ./docker/db/mysql_data:/var/lib/mysql
ports:
- "3306:3306"
hostname: localhost
environment:
MYSQL_ROOT_PASSWORD: 'root'
# 所属するネットワークとIPを指定
networks:
br0:
# このIPアドレスがデータベースホスト名になる ( localhost → 192.168.202.2)
ipv4_address: 192.168.202.2
web:
container_name: projectname_apache_php
build: ./docker/web
ports:
- '8080:80'
volumes:
- ./public_html:/var/www/html
- ./docker/logs:/var/log/httpd
depends_on:
- mysql
# 所属するネットワークとIPを指定
networks:
br0:
ipv4_address: 192.168.202.3
phpmyadmin:
container_name: projectname_phpmyadmin
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=root
links:
- mysql
ports:
- 8088:80
volumes:
- /sessions
# 所属するネットワークとIPを指定
networks:
br0:
ipv4_address: 192.168.202.4
# 新規ブリッチを定義
networks:
br0:
driver: bridge
ipam:
config:
- subnet: 192.168.202.0/24
gateway: 192.168.202.1
$ docker-compose up で以下のエラーになった場合
$ docker-compose up
Recreating projectname_mysql ... error
ERROR: for projectname_mysql Cannot start service mysql: b"Invalid address 192.168.202.2: It does not belong to any of this network's subnets"
ERROR: for mysql Cannot start service mysql: b"Invalid address 192.168.202.2: It does not belong to any of this network's subnets"
ERROR: Encountered errors while bringing up the project.
おそらく2つ以上のLAMP環境を作ろうとした時に出ると思います。
docker上で同じIPアドレスがあると動かせないので、docker-compose.yml内のIPアドレスを192.168.200.*
を書き換えてください。
例) 192.168.202.* → 192.168.210.* などで検索置換
※注意
mysqlのipv4_address を書き換えた場合は、
mysqlの接続情報のホスト名が変わります!!
docker/web/Dockerfile
apacheの必要なモジュール、mod_rewriteの有効、GDのインストール、phpのバージョン指定など設定
FROM php:5.6.28-apache
# FROM php:7.1-apache #php7をインストールしたい方はこちらを有効に
MAINTAINER docker-web
RUN apt-get update \
&& apt-get -y install vim wget lsb-release libicu-dev mysql-client \
&& docker-php-ext-install pdo_mysql mysqli intl
# mod_rewriteを 有効に
RUN a2enmod rewrite
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
RUN a2enmod headers
RUN a2enmod include
# GD関連のインストール
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev
RUN docker-php-ext-install gd
COPY ./base.conf /etc/apache2/sites-available/base.conf
RUN a2ensite base.conf
COPY ./php.ini /usr/local/etc/php/
# ポートの解放
EXPOSE 80
docker/web/base.conf
apacheの設定。 AllowOverride All
で .htaccess
が有効になります。
ログの出力も設定可能です。
以下の設定では docker/log/
内に出力されます。
<VirtualHost *:80>
DocumentRoot "/var/www/html"
Options Includes
ErrorLog "/var/log/httpd/localhost-error_log"
CustomLog "/var/log/httpd/localhost-access_log" custom
<Directory "/var/www/html">
AllowOverride All
</Directory>
</VirtualHost>
docker/web/php.ini
PHPの設定
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese
docker/db/Dockerfile
MySQLのバージョン指定
FROM mysql:5.6
MAINTAINER docker-db
COPY ./my.cnf /etc/mysql/my.cnf
docker/db/my.cnf
MySQLの設定
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql
説明は以上になります。
PHP versionの変更方法
docker/web/Dockerfile
をテキストエディタで編集します。
最初の1-2行目で使いたいバージョン以外をコメントアウトするだけです。
php5.6にしたい場合
FROM php:5.6.28-apache
# FROM php:7.1-apache
php7.1にしたい場合
# FROM php:5.6.28-apache
FROM php:7.1-apache
#参考サイト
一番参考になったのはこちら(感謝!)
他
- Docker for MacとDocker ComposeでささっとLAMP環境を作る - Qiita
- DockerでPHP7.1とApacheの環境を構築 - IT石ログ
- DockerでLaravel+PHP5.6+MySQL5.6+Apacheの環境構築 - Qiita
- 今更ながらDockerでCentOS PHP5.6 の環境を構築 - 気ままに
- Dockerで立ち上げたwebサーバでmod_rewriteしたかった話 - MagChoの雑記
- Apacheのmod_rewrite設定メモ - Qiita
もし baserCMS4系 の最新制作環境が欲しい人はこちら (Mac)