[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Successor to CentOS] AlmaLinux OS server construction/migration service

[Successor to CentOS] AlmaLinux OS server construction/migration service

[For WordPress only] Cloud server “Web Speed”

[For WordPress only] Cloud server “Web Speed”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Reservation system development] EDISONE customization development service

[Reservation system development] EDISONE customization development service

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Compatible with over 200 countries] Global eSIM “Beyond SIM”

[Compatible with over 200 countries] Global eSIM “Beyond SIM”

[If you are traveling, business trip, or stationed in China] Chinese SIM service “Choco SIM”

[If you are traveling, business trip, or stationed in China] Chinese SIM service “Choco SIM”

[Global exclusive service] Beyond's MSP in North America and China

[Global exclusive service] Beyond's MSP in North America and China

[YouTube] Beyond official channel “Biyomaru Channel”

[YouTube] Beyond official channel “Biyomaru Channel”

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
356
X facebook はてなブックマーク pocket
[2024.6.30 CentOS support ended] CentOS server migration solution

[2024.6.30 CentOS support ended] CentOS server migration solution

[2025.6.30 Amazon Linux 2 support ended] Amazon Linux server migration solution

[2025.6.30 Amazon Linux 2 support ended] Amazon Linux server migration solution

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

The person who wrote this article

About the author

Yoichi Bandai

My main job is developing web APIs for social games, but I'm also fortunate to be able to do a lot of other work, including marketing.
Furthermore, my portrait rights in Beyond are treated as CC0 by him.