13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerとAtomを使ってPHPの開発を始めるまで

Last updated at Posted at 2017-04-16

#概要

Dockerを用いたPHP開発環境の構築。
デバッグなどの方法も設定。

##やりたかったこと
PHPの開発環境を作って、PHPのコーディング練習を行いたい!
環境構築には、再利用がカンタンなDockerを用いることで、今後も気軽に環境構築できるようにします。

開発には、エディタ「Atom」を用いて、ホストに置いてあるソースを編集し、そのディレクトリをコンテナにマウントすることで、編集を容易にします。

また、開発において、デバッグができないと困るので、
xdebugによるデバッグをできるよう設定しました。

一度に書くには量が多いので、まずはPHPの公式イメージを用いたコンテナの作成と、
PostgreSQLによるデータベースコンテナの作成から。

##使用環境

  • Windows10(ホストOS)
  • Docker Quickstart Terminal
  • Docker 1.12.0
  • Docker-compose 1.8.0
  • VirtualBox 5.1.0
  • Atom(エディタ)

やったこと

  • PHPのイメージを作成
  • Postgresqlのイメージを作成
  • docker-composerでコンテナを起動
  • xdebugの設定(Atom)

PHPのコンテナイメージを作成

PHPコンテナを作成するために、以下のDockerfileを作成しました。
途中、COPYコマンドでコンテナ内にコピーすることになるphp.iniには、
xdebugの設定等、必要な部分のみを書き込みます。
※php.iniは作成したコンテナ内に用意されていないため、自分で作る必要があるようです。

Dockerfile(PHP)
FROM php:5.6-apache

# php.iniをホストからコピー
COPY php.ini /usr/local/etc/php/

# xdebugのインストール
RUN pecl install xdebug

#開放するポートの設定
EXPOSE 80

#実行時のコマンド指定
CMD ["apache2-foreground"]
php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[xdebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=172.17.0.1
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true

php.iniの中で、
xdebug.remote_hostは仮想ブリッジのIPを設定します。
(参考:Dockerのネットワークを理解するために覚えたことまとめ

また、zend_extensionは、RUN pecl install xdebug時に違うパスになっている場合があるので、
もしうまくいかないときは、php:5.6-apacheのコンテナを起動して、pecl install xdebugを実行し、パスを確認。

2ファイルが用意できれば、両ファイルがあるディレクトリでdocker build -t イメージ名 .を実行し、イメージを作成。
一応docker runで動くかどうか確認する。

#PostgreSQLのコンテナイメージを作成
ここで詰まった。

PostgreSQLサーバは、公式のイメージを使うので、Dockerfileは省略。
データ永続化のため、DBインスタンスが配置される/var/lib/postgresql/dataをマウントする。
一応動くか確認のため、以下のコマンドを実行したところ...
docker run -d -p 5432:5432 -v ${パス}/vol:/var/lib/postgresql/data postgres:9.6.2

...コンテナが起動しない。
docker ps -aで確認したところ、コンテナは作成されているようだが、起動しない。

-vオプションを除けば動くが、それでは肝心のデータをホストにマウントできない。

試行錯誤の結果うまくいかなかったため、下記の案で代替することにしました。
(本当はちゃんと外に出したかった。)

1.データボリュームコンテナを作成
docker run --name postgres-data -v /var/lib/postgresql/data busybox

2.データボリュームコンテナをpostgreSQLの/var/lib/postgresql/dataにマウント
(参考:Docker上のPostgreSQLのデータの永続化の話

#docker-compose
PHPコンテナと、Postgresqlコンテナをいっぺんに動かしたいので、docker-composeを利用します。
(データベースボリュームコンテナは、他二つのコンテナを消すなどした時も残ってほしいので、別でrunしました。)
docker run --name postgres-data -v /var/lib/postgresql/data busybox

まずはdocker-compose.yamlの作成。

docker-compose.yaml
# Postgresql Server ====================================================

postgresql:
  image: postgres
  environment:
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: docker
  ports:
    - "5432:5432"
  container_name: postgres-db
  volumes_from:
      - postgres-data


# myphp ================================================================

myphp:
  image: myphp
  ports:
    - "80:80"
    - "9000:9000"
  volumes:
    - ${ホスト上のPHPソースを置くパス}:/var/www/html/
  links:
    - postgresql:db

postgresqlコンテナcontainer_nameは、データボリュームコンテナの名前を入れます。

myphpコンテナは、ソースコードを設置するディレクトリをホストからマウントできるよう、volimesを設定しました。
また、myphpコンテナでは、80ポートだけでなく、xdebugで用いる9000ポートも開放します。

あとは、docker-compose.exe up -dを実行。

#Atomでのxdebugの設定(Path Mapの設定)
さて、xdebugについては、PHPのDockerfileに書き込んだRUNコマンドからインストールを行い、php.iniに設定を書き込み、使用する9000ポートもdocker-compose.yamlでコンテナを立ち上げる時にフォワードするよう設定しました。

デバッグを行うには、まずAtomのパッケージphp-debugをインストールする必要があります。
Atomを起動し
 File > Setting > InstallPackages
とたどり、php-debugを探してInstall。

インストールが終了したら、xdebugにPath Mapを教えてあげます。

 File > Setting > Packages
を選択し、インストール済みパッケージリストの中からphp-debugを探します。
見つけたら「Setting」ボタンを押下します。

Path Mapの項目を見つけ出し、以下のように入力します。
${コンテナのマウントディレクトリパス};${ホストのマウントディレクトリパス}

これで、Atom画面下の「PHP Debug」ボタンからブレークポイントの作成が可能です。
参考:php-debug 一番下にPath Mapの記述があります。

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?