はじめに
業務でCodeIgniter用の環境を作る必要があり、Laradockを使用することにしました。
今回は純粋なサーバーサイドPHPのためNode.jsをインストールしない環境を構築します。
やりたいことは次の通りです。
- PHPの実行環境を作成する
- 作成したPHPのファイルにWebサーバー(Apache)でアクセスする
- DBにPostgreSQLを採用する
- PHPのリモートデバッグをする
それでは以下手順です。
Dockerやgitのインストールは済んでいるものとします。
テキストエディタはVisual Studio Codeを想定しています。
Laradockの設定ファイルを編集する
まずはプロジェクトのディレクトリを作成し、そのディレクトリ内でLaradockをクローンします。
# ディレクトリを作成し移動する
$ mkdir dockerProject && cd dockerProject
# Laradockをクローンする
$ git clone https://github.com/laradock/laradock.git
# Laradockのgit管理をやめる
$ rm -rf ./laradock/.git
# 後々必要となるディレクトリを先に作成する
$ mkdir web && mkdir db
.envファイルを作成し、内容を編集します。
# テンプレートをコピーしてenvファイルを作成する
$ cp ./laradock/env-example ./laradock/.env
# ローカル上のソースを置くディレクトリを指定する(8行目)
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../web
# ローカル上のソースをマウントするサーバー上のディレクトリを指定する(11行目)
- APP_CODE_PATH_CONTAINER=/var/www:cached
+ APP_CODE_PATH_CONTAINER=/var/www/html:cached
# データの保存先を変更する(14行目)
- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=../db
# PHPのバージョンを変更する(35行目)
- PHP_VERSION=7.2
+ PHP_VERSION=7.1
# Nodeをインストールしない(75行目)
- WORKSPACE_INSTALL_NODE=true
+ WORKSPACE_INSTALL_NODE=false
# Yarnをインストールしない(78行目)
- WORKSPACE_INSTALL_YARN=true
+ WORKSPACE_INSTALL_YARN=false
# Redisをインストールしない(80行目)
- WORKSPACE_INSTALL_PHPREDIS=true
+ WORKSPACE_INSTALL_PHPREDIS=false
# Xdebugをインストールする(83行目)
- WORKSPACE_INSTALL_XDEBUG=false
+ WORKSPACE_INSTALL_XDEBUG=true
# PostgreSQLクライアントをインストールする(107行目)
- WORKSPACE_INSTALL_PG_CLIENT=false
+ WORKSPACE_INSTALL_PG_CLIENT=true
# Xdebugをインストールする(127行目)
- PHP_FPM_INSTALL_XDEBUG=false
+ PHP_FPM_INSTALL_XDEBUG=true
# PostgreSQLドライバーをインストールする(136行目)
- PHP_FPM_INSTALL_PGSQL=false
+ PHP_FPM_INSTALL_PGSQL=true
# PostgreSQLクライアントをインストールする(140行目)
- PHP_FPM_INSTALL_PG_CLIENT=false
+ PHP_FPM_INSTALL_PG_CLIENT=true
# PostgreSQLドライバーをインストールする(145行目)
- PHP_WORKER_INSTALL_PGSQL=false
+ PHP_WORKER_INSTALL_PGSQL=true
# HTTP, HTTPSのポートを変更する(158, 159行目)
- APACHE_HOST_HTTP_PORT=80
- APACHE_HOST_HTTPS_PORT=443
+ APACHE_HOST_HTTP_PORT=8080
+ APACHE_HOST_HTTPS_PORT=8443
# DocumentRootを変更する(165行目)
- APACHE_DOCUMENT_ROOT=/var/www/
+ APACHE_DOCUMENT_ROOT=/var/www/html
Apache2のDockerfileを編集します。
# OSをUbuntuからCentOSに変更する(1行目)
- FROM webdevops/apache:ubuntu-16.04
+ FROM webdevops/apache:centos-7
PostgreSQLのDockerfileを編集します。
# PostgreSQLのバージョンを指定してインストールする(1行目)
- FROM postgres:alpine
+ FROM postgres:9
Dockerでコンテナを立ち上げる
イメージをビルドしてコンテナを起動します。
# docker-compose.ymlのあるディレクトリに移動する
$ cd laradock
# イメージをビルドしてコンテナをバックグラウンドで起動する(初回は時間が掛かります)
$ docker-compose up -d --build workspace postgres php-fpm apache2
ブラウザでlocalhost:8080にアクセスします。
PHPを実行する
webディレクトリ配下にindex.phpを作成します。
<?php
echo 'Hello from docker!<br>';
phpinfo();
作成できたら再度ブラウザでlocalhost:8080にアクセスします。
DBに接続する
PHPでPostgreSQLに接続してみます。
<?php
echo 'Hello from docker!<br>';
+ $connection_string = "host=postgres dbname=default user=default password=secret port=5432";
+ $link = pg_connect($connection_string);
+ if ($link) {
+ $db_name = pg_dbname($link);
+ echo '接続に成功しました。<br>';
+ echo '現在接続しているDBは' . $db_name . 'です。<br>';
+ } else {
+ echo '接続に失敗しました。<br>';
+ }
+ $close_flg = pg_close($link);
+ if ($close_flg) {
+ echo '切断に成功しました。<br>';
+ }
phpinfo();
コマンドラインからpsqlコマンドを使用してみます。
workspaceコンテナのbashを起動する
$ docker-compose exec workspace bash
ホスト名(コンテナ名)とユーザ名(ロール名)を指定してpsqlモードに入る
# psql -h postgres -U default
Password for user default: secret
DBを切り替える(自分で作成したDBに接続する)
デフォルトではなく、自分で作成したデータベース・ユーザーで接続してみます。
# psql -h postgres -U default
Password for user default: secret
# create user testuser with password 'testpassword';
# create database testdb with owner testuser;
# \du
# \l
# \q
index.php を編集します。
<?php
echo 'Hello from docker!<br>';
- $connection_string = "host=postgres dbname=default user=default password=secret port=5432";
+ $connection_string = "host=postgres dbname=testdb user=testuser password=testpassword port=5432";
$link = pg_connect($connection_string);
if ($link) {
$db_name = pg_dbname($link);
echo '接続に成功しました。<br>';
echo '現在接続しているDBは' . $db_name . 'です。<br>';
} else {
echo '接続に失敗しました。<br>';
}
$close_flg = pg_close($link);
if ($close_flg) {
echo '切断に成功しました。<br>';
}
phpinfo();
PHPのリモートデバッグを行う
php-fpmディレクトリ配下のxdebug.iniを編集します。
# 3行目
- ; xdebug.remote_host=dockerhost
+ xdebug.remote_host=docker.for.mac.localhost (Docker for Macの場合)
+ xdebug.remote_host={Vagratのホストマシンの接続IPアドレス} (Vagratの場合)
# 4行目
- xdebug.remote_connect_back=1
+ xdebug.remote_connect_back=0
# 5行目
- xdebug.remote_port=9000
+ xdebug.remote_port=9001
# 8行目
- xdebug.remote_autostart=0
+ xdebug.remote_autostart=1
# 9行目
- xdebug.remote_enable=0
+ xdebug.remote_enable=1
# 10行目
- xdebug.cli_color=0
+ xdebug.cli_color=1
# 最終行に追加
+ xdebug.remote_log="/tmp/xdebug_log"
workspaceディレクトリ配下のxdebug.iniを編集します。
# 3行目
- ; xdebug.remote_host=dockerhost
+ xdebug.remote_host=docker.for.mac.localhost (Docker for Macの場合)
+ xdebug.remote_host={Vagratのホストマシンの接続IPアドレス} (Vagratの場合)
# 4行目
- xdebug.remote_connect_back=1
+ xdebug.remote_connect_back=0
# 5行目
- xdebug.remote_port=9000
+ xdebug.remote_port=9001
# 8行目
- xdebug.remote_autostart=0
+ xdebug.remote_autostart=1
# 9行目
- xdebug.remote_enable=0
+ xdebug.remote_enable=1
# 10行目
- xdebug.cli_color=0
+ xdebug.cli_color=1
# 最終行に追加
+ xdebug.remote_log="/tmp/xdebug_log"
設定ファイルを編集し終わったらコンテナを停止・削除し、再びイメージをビルドしてコンテナを起動します。
$ docker-compose down
$ docker-compose up -d --build workspace postgres php-fpm apache2
Visual Studio Code で PHP Debug の拡張をインストールします。
インストールしたら左のサイドメニューからデバッグのアイコンをクリックし、上部の歯車アイコンをクリックします。
PHPを選択します。
launch.jsonというファイルが作成されるので下記のように編集します。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
+ "pathMappings": {
+ "/var/www/html": "${workspaceRoot}/web",
+ },
- "port": 9000
+ "port": 9001
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
ステップ実行で止めたい部分にブレイクポイントを貼ります。
F5キーを押してデバッグを起動します。
ブラウザでlocalhost:8080にアクセスします。
するとブレイクポイントを張った箇所でストップしてデバッグができます。
以上で Laradock を使ったPHPの実行環境が作成できました。