Dockerで作るPHPの実行環境サンプル

ファイル一式: https://github.com/mistymagich/vagrant-docker-php

php,nginx,mysqlのコンテナを動かして、PHPを実行させるサンプル環境です。

vagrantとvirtualboxもしくはdockerがインストールされているlinuxから起動できます。

必要なもの

  • Vagrantを使う方式
  • Dockerから起動する方式
    • DockerがインストールされたLinux
      バージョン 1.5.0 以上

セットアップ

  • Vagrantを使う方式
        > git clone https://github.com/mistymagich/vagrant-docker-php.git
        > cd vagrant-docker-php
        > vagrant up
    

    CoreOSが立ち上がるので、PuTTYなどでSSHでログインする (接続先は vagrant ssh-configで確認)

        $ cd /vagrant
        $ /vagrant/docker-build.sh
    
  • Dockerから起動する方式
        $ git clone https://github.com/mistymagich/vagrant-docker-php.git
        $ cd vagrant-docker-php
        $ chmod +x *.sh
        $ sudo ./docker-build.sh
        $ sudo echo '127.0.0.1 sandbox.local' >> /etc/hosts
    

    Ubuntu/Debianでdockerコマンドが docker.io1 になっている場合、docker-build.sh、docker-run.shの

    DOCKER=docker
    

    DOCKER=docker.io
    

    に変更したのち実行する。

起動

$ sudo ./docker-run.sh

正常に起動できれば、ブラウザで

http://sandbox.local

でアクセスするとPHPInfoが表示されます。

MySQLコンテナとの接続サンプルは

http://sandbox.local/dbconnect.php

にあります。

構造

Nginxコンテナ

コンテナ名:sandbox-nginx

公式Nginxコンテナをもとに、ホスト名sandbox.localに対して、PHPコンテナを参照する設定追加しています。
ドキュメントルートはsrc/public
拡張子がPHPならPHPコンテナにあるPHP-FPMを通して実行されます。

MySQLコンテナ

コンテナ名:sandbox-mysql

公式MySQLコンテナをそのまま利用しています。

データの永続化はしていません。

docker-run.sh実行時にsrcディレクトリにあるinit.sqlを実行することで、データベース・テーブル・データのインポートを行っています。

sanbox.localに対して3306にアクセスすることでMySQLコンテナにアクセスできます。

ユーザー名はroot、パスワードはdocker-run.shでMySQLコンテナ起動時にMYSQL_ROOT_PASSWORDで指定している値です。(編集していない場合、mysecretpw)

PHP(FPM)コンテナ

コンテナ名:sandbox-php

公式PHPコンテナのFPMをもとに、以下のモジュールを追加しています。

  • pdo
  • pdo_mysql
  • gd
  • mysqli
  • mcrypt
  • mbstring
  • iconv

関係図

関係図

PHP(FPM)コンテナはホスト名mysqlでMySQLコンテナにアクセスできます。
Nginxコンテナはホスト名phpでPHP(FPM)コンテナを参照しています。

PHPMyAdminを動かすサンプル

  1. PHPMyAdminをダウンロード
  2. 解凍して、中にあるPHPファイルをsrc/publicにコピー(すでにあるファイルは削除する)
  3. config.sample.incをconfig.incにリネーム
  4. config.incを編集

    ホスト名を変更

     /* Authentication type */
     $cfg['Servers'][$i]['auth_type'] = 'cookie';
     /* Server parameters */
    -$cfg['Servers'][$i]['host'] = 'localhost';
    +$cfg['Servers'][$i]['host'] = 'mysql';
     $cfg['Servers'][$i]['connect_type'] = 'tcp';
    

    末尾に追加

     $cfg['CheckConfigurationPermissions'] = false;
    
  5. http://sandbox.localにアクセス
  6. ID:root / PW:mysecretpw (docker-run.shのMySQLコンテナ起動時のMYSQL_ROOT_PASSWORDで指定している値)

その他

  • docker-run.sh実行時にすべてのコンテナを削除します。
  • コンテナが正常に動かない場合、docker ps -aでコンテナIDを調べ、docker logs コンテナID で原因となるメッセージが出力されることがあります。

  1. Ubuntu/Debianの場合、dockerコマンドがdocker.ioになっているため、いまさら聞けないDocker入門(2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方 (1/3) – @ITにあるようにしてdockerコマンドを利用できるようにする方法もあります。 
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中