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

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

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

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

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

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

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

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

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

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

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【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 ~
vagrant@vagrant:~$ git clone https://github.com/docker-library/php.git
vagrant@vagrant:~$ 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をやってみます。

vagrant@vagrant:~/php/7.0/apache$ docker build -t myphp7 .

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

vagrant@vagrant:~/php/7.0/apache$ docker run -it myphp7 /bin/bash
root@66c8bbc720a9:/var/www/html# ls
mbstring.php
root@66c8bbc720a9:/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
root@66c8bbc720a9:/var/www/html# curl http://localhost/mbstring.php
1234567890root@66c8bbc720a9:/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
449
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

萬代陽一

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