これまでMAMPで開発していたプロジェクトをDocker化したので、その備忘録です。
作ったものは下に置いています。
https://github.com/shnr/docker_lamp_2
Dockerコンテナ作成
今回作成する環境
php 7.1
mysql 5.6
cakephp3.4
phpmyadmin
ディレクトリ構成
どのようにでも出来そうですが、下の記事がわかりやすかったので参考にさせてもらいました。
https://qiita.com/ciloholic/items/c9bbb604d8338551b5dc
├── db
│ ├── Dockerfile
│ ├── my.cnf
│ └── mysql_data
├── docker-compose.yml
├── html
│ └── www
└── web
├── Dockerfile
├── base.conf
└── php.ini
各設定ファイルの作成
下準備
プロジェクトのルートに移動し、各ディレクトリを作成します。
$ cd ~/Dev/proj/docker
$ mkdir db
$ mkdir web
$ mkdir html
docker-compose
webのvolumesで、:cached オプションをつけることでMac on dockerのもっさり感が軽減されました。
PMA_HOST はコンテナ立ち上げ後に取得出来るようでした。なので後ほど書き換えます。
$ vim docker-compose.yml
version: '2'
services:
web:
build: ./web
ports:
- '8080:80'
volumes:
- ./html:/var/www/html:cached
depends_on:
- db
db:
build: ./db
volumes:
- ./db/mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 'password'
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=password
restart: always
links:
- db
ports:
- 8888:80
volumes:
- /sessions
web/Dockerfile
今回はphp7.1です。
モジュール等は都度調整すれば良さそうです。
$ vim web/Dockerfile
FROM php:7.2-apache
MAINTAINER docker-web
RUN apt-get update \
&& apt-get -y install vim wget lsb-release libicu-dev default-mysql-client libfreetype6-dev libjpeg62-turbo-dev libpng-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
ディレクトリをサブドメイン化出来る設定でした。
$ vim web/base.conf
<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
$ vim web/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese
db/Dockerfile
$ vim db/Dockerfile
FROM mysql:5.6
MAINTAINER docker-db
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
db/my.cnf
$ db/my.cnf
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql
ビルド
ここでビルドする。
$ docker-compose build
$ docker-compose ps
これで、/html/www/index.html などでファイルを作れば、 http://www.localhost:8080/ のようにアクセスが可能になります。
次に、phpmyadminやアプリケーション側でのホスト設定のため、mysqlホスト名を確認します。
ログイン
execコマンドでサーバへログイン。
$ docker exec -it docker_lamp_db_1 /bin/sh
ホスト名を確認する。
mysql> select @@hostname;
xxxxxxxxxxxxxxx
docker-compose.ymlのPMA_HOSTを書き直します。
$ vim docker-compose.yml
...
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=xxxxxxxxxxxxxxx
- PMA_USER=root
- PMA_PASSWORD=password
phpmyadminのみ、再度ビルド。
$ docker-compose build phpmyadmin
$ docker-compose up -d phpmyadmin
http://localhost:8888/index.php
OK!
Cakephp3のインストール
これで基本的なLAMP環境ができたので、アプリケーションのインストールを行います。
composerからのインストール。
$ cd html/
$ curl -sS https://getcomposer.org/installer | php
今回は3.4.5なので、バージョンを指定。 ※指定がなければ最新版が入る。
$ php composer.phar create-project --prefer-dist cakephp/app:3.4.5 msid
成功すれば、http://www.localhost:8080/ でデフォルト画面が表示されます。
既存cakephp3プロジェクトの移行
まずダンプデータをを取得、./db/mysql_data 配下に格納しました。
docker-compose.ymlで定義しているように、ここがコンテナ内の /var/lib/mysql/ となります。
DBコンテナにログインして、
$ docker exec -it docker_lamp_db_1 /bin/sh
DB作成
$ mysql -u root -p
mysql> CREATE DATABASE newdb;
復元
mysql -u root -p newdb < /var/lib/mysql/my_data.sql
perfect.
そして、ファイルをしかるべきところへ移し、DB設定も変更すれば、
'host' => 'xxxxxxxxxxxxxxx',
'username' => 'root',
'password' => 'password',
無事移行完了となりました。