FuelPHP
docker

DockerでFuel PHP開発環境を構築

More than 1 year has passed since last update.


開発環境をDockerに移行

ローカルの開発環境をDockerに移行しました。

以前は時々Docker環境を作ったりはしたものの、Vagrantや、PythonNode.js辺りだとmacOSでそのまま実行することが多かったのですが、他の端末と実行環境を整えるためにも統一したほうがいいなと。

Vagrantでもそれほど不満はなかったんですが、ちょっとしたバージョン違いで新しいVMイメージまた作るのも扱いづらいし、vagrant sshの中で都度作業が嫌だったので全部Dockerで管理することにしました。

ホスト側からコンテナがどうなってるかも大体見れるし設定ファイルさえ書いてしまえば後は楽だなって印象です。


ディレクトリ構成


ディレクトリ構成

.

├── Dockerfile
├── docker-compose.yml
├── fuelphp-1.8
│   └── public
│   └── index.php
├── spam
│   └── public
│   └── index.php
├── ham
│   └── public
│   └── index.php
└── vhost
└── vhost.conf


Dockerfile


Dockerfile

FROM php:7.1.7-apache

ENV APP_ROOT /var/www

WORKDIR $APP_ROOT

RUN docker-php-ext-install pdo_mysql mysqli
RUN a2enmod vhost_alias && a2enmod rewrite && service apache2 restart

EXPOSE 80


DB周りでpdomysqliが不足していたため追加したのと、vhost_aliasmod_rewriteを有効にしてあります。


docker-compose.yml


docker-compose.yml

version: '2'

services:
php:
build: .
ports:
- '80:80'
volumes:
- '.:/var/www/'
- './vhost:/etc/apache2/sites-enabled:ro'
links:
- mysql
mysql:
image: mysql:5.7.10
environment:
MYSQL_ROOT_PASSWORD: 'docker'
ports:
- '3306:3306'
volumes:
- mysql-data:/var/lib/mysql

volumes:
mysql-data:
driver: local


services内にphpmysqlコンテナの設定を記述します。

Dockerfileを指定する場合はbuild:にDockerfileのパスを、既存のイメージを指定する場合はimage:にイメージを指定してください。

ports:ホスト側のポート:コンテナ側のポートです。

volumes:も同様にホスト側のパス:コンテナ側のパスで最後に:roを指定することでReadOnlyになります。


vhost.conf


vhost/vhost.conf

NameVirtualHost *:80

<VirtualHost *:80>
ServerName docker
ServerAlias *.docker
VirtualDocumentRoot /var/www/%1/public_html
<Directory /var/www/*/public>
AllowOverride All
Order deny,allow
Allow from all
Require all granted
Options Includes FollowSymLinks
AddType text/html .html
AddOutputFilter INCLUDES .html
</Directory>
</VirtualHost>


docker-compose.ymlでコンテナ側の/etc/apache2/sites-enabledに設置しています。

本筋からは離れますが、ServerAliasで複数サイトを動作させています。

http://fuelphp-1.8.docker

http://spam.docker

http://ham.docker のようにアクセスができます。


コンテナの作成

docker-compose.ymlDockerfileの内容からコンテナを作成します。

docker-compose build && docker-compose up -d


MySQLへの接続


.zshrc

alias mysql='mysql -u root -h localhost -P 3306 --protocol=tcp -pdocker'


オプションで--protocol=tcpを付けないと上手くDockerに接続できない。

ホストOSでMySQLを使わないなら.zshrc.bash_profile辺りにエイリアスを設定しておくと便利。