【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【9,800円/回】Webサイト自動診断サービス「クイックスキャナー」

【9,800円/回】Webサイト自動診断サービス「クイックスキャナー」

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【次世代】ゲーム専用データ分析エンジン『ThinkingEngine』

【次世代】ゲーム専用データ分析エンジン『ThinkingEngine』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

PHP実行環境を色々試す! 2016年はDockerコーデで決まり!

こんにちは。
開発チームのワイルド担当、まんだいです。

dockerでオシャンティな開発環境を作りたいなら、docker buildでオリジナルのdockerイメージを作ってみるのはいかがでしょう?
着回しやすいdockerイメージを持っていると、アレンジにも幅が出るはず!

こちらはdocker入門シリーズの1記事として書かれています。
過去のdocker入門シリーズをお読みになりたい場合は、以下のリンクより辿ってみてください。

なお、今回はコピペではできないため、コピペでできるシリーズではありません。悪しからず。

 

PHPの実行環境について

docker hubに並んでいるdockerイメージは、かなり優秀で、そのまま使っても全く問題ないですが

  • 例えばソースファイルを置くディレクトリには、もうちょっとこだわりを出したいとか
  • PHPからffmpegを使って、音声ファイルのエンコードをしたいとか
  • 拡張モジュールをズコズコつっこんだPHPを使いたいとか

そういう要求に応えるためには、dockerイメージを独自に再構築するしかないと思います。

既存のdockerイメージに変更を加えて、再度ビルドする事で対応できる場合は多いですが
PHPのコンパイルの時点でモジュールを入れてしまう事も可能です。

dockerのビルドはDockerfileが手順書になっていて、それを見れば何をどうしているのか一目瞭然です。
つまりは、自分が今使っているdockerイメージも、どこかにDockerfileがあり
そのDockerfileに少しの修正を施しビルドすれば、自分が欲する最適なdockerイメージが手に入るという事です。

更には、Dockerfileもあろうことかgithubにアップされ、オープンになっているものも多い(オフィシャルのdockerイメージであればあるほどその傾向が強い)ので、色んなDockerfileを見て、やり方を盗むには持って来いです。

今回は、PHPの公式dockerイメージを参考に、マルチバイト対応済みのPHPが入ったdockerイメージを作ってみたいと思います。

 

まずは、ベースになるdockerイメージを探す

docker hubに並んでいるdockerイメージを見れば、自分が作りたいものに近いdockerイメージを探す事は簡単です。
今回は、PHPの公式dockerイメージをベースに、修正を加えてみたいと思います。
ページを見てみると、github上で管理されているDockerfileへのリンクがあります。

(7.0/apache/Dockerfile) というリンクをたどると、PHP7.0系 + apacheのdockerイメージ作成用のDockerfileが見えました。
これをたたき台にしてみます。
VMで、このリポジトリをgit cloneし、修正をしてみましょう。

cd ~
[email protected]:~$ git clone https://github.com/docker-library/php.git
[email protected]:~$ cd /home/vagrant/php/7.0/apache

./configure のオプションに、「--enable-mbstring」を追記します。
また、テスト用のPHPファイルを作成し、dockerイメージにCOPYします。

vi Dockerfile

# Dockerfile 59行目付近
        && ./configure 
                --enable-mbstring                             # ← 追記
                --with-config-file-path="$PHP_INI_DIR" 

# 以下のCOPY命令をDockerfileの適当なところに追記
# 私は、WORKDIR /var/www/html の前に追記しました。

COPY mbstring.php /var/www/html/

 

docker buildでPHPのコンパイルをやってみる

修正できたら、mbstring.phpを作成します。

echo "<?php echo mb_convert_kana('1234567890', 'N');" > mbstring.php 

作成できたら、docker buildをやってみます。

[email protected]:~/php/7.0/apache$ docker build -t myphp7 .

このbuildでは、前回とは違って、apt-getのアップデートなどがガンガン動くので、ビルドするのに結構時間が掛かります。
ビルドが完了したら、dockerイメージからdockerコンテナを作成してみましょう。

[email protected]:~/php/7.0/apache$ docker run -it myphp7 /bin/bash
[email protected]:/var/www/html# ls
mbstring.php
[email protected]:/var/www/html# service apache2 start
[....] Starting web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
. ok
[email protected]:/var/www/html# curl http://localhost/mbstring.php
1234567890[email protected]:/var/www/html#

半角数字を全角数字にコンバートする命令を実行して、終了する感じですが、問題なくコンバートできていますね。

イチから自分でする必要はなくて、比較的プレーンなDockerfileを探して、たたき台にするとビルドまで手早く持ってこられるんじゃないかと思います。
phpのオフィシャルdockerイメージはvimも入っていないので、中でコンフィグを修正したりする場合は、apt-getでvimをインストールしておけば問題ないでしょう。

vagrantを使って仮想環境を作ると、どうしてもファイルサイズが気になるところですが
dockerイメージを作成する場合、1/4のサイズで収まりましたので(もちろん、PHPの実行環境のみですが)共有するのもお手軽ですね。
そもそもDockerfileとdockerイメージに入れるファイルだけを共有すれば、gitリポジトリで管理する事も容易いです。

コンパイル処理全体をコマンド化できるというのは、開発の初期に環境構築する上でも非常にメリットが多いので
apt-getやyumに頼りきらず、最適なコンパイルオプションを付けて、最適な実行環境を用意できるようになりたいものです。

以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
201
facebook twitter はてなブックマーク
【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

萬代陽一

ソーシャルゲームのウェブ API などの開発がメイン業務ですが、ありがたいことにマーケティングなどいろんな仕事をさせてもらえています。
なおビヨンド内での私の肖像権は CC0 扱いになっています。