CakePHPを触って見ようと思い + Dockerにも慣れたかったので、
DockerでCakePHPの環境を作ってみました。
今回はDockerHubにあるオフィシャルのPHPイメージを元に作成しました。
PHPベースイメージの取得・作成
$ docker pull php
コンテナ作成
$ docker run -it -v /cakephp:/usr/src/cakephp -p 80:80 --name="cake" [イメージID] bash
root@f36eb81a38bf:/#
これでコンテナを作成しbashコマンドまで実行できる。
上記のようにコンテナ内に入れるのでここで必要なパッケージ等のインストールをしていく。
composerインストール
# cd usr/src/cakephp
# curl -sS https://getcomposer.org/installer | php
※実際は#
の前にパスが表示されますがここでは省略してます。
(参考)composerドキュメント日本語訳
(-s:進捗やエラーを表示しない/ -sS:エラーだけ表示して進捗は表示しない)
composerコマンドを使えるように
・パスがある場所にcomposer.pharを移動する
# mv composer.phar /usr/local/bin/composer
(参考)http://blog.toshimaru.net/how-to-use-composer-autoload/
gitインストール(Cakeプロジェクト作成に必要)
ベースにしたphpの公式イメージのOSはalpine
を使っている風な感じでしたが、パッケージ管理はapt-get
でした。(apk
は入ってませんでした)
※実際にcat /etc/issue
でディストリビューションを調べるとDebian
でした。
# apt-get install -y git
vimインストール(ファイル編集用※vi使うならなくてもいい)
# sudo apt-get install -y vim
CakePHPに必要なPHP拡張をインストール
公式に記載されているPHP拡張をインストールします。
①mbstring拡張
・インストール済み(ベースイメージに含まれていたようです)
(確認方法)
・aptitude
というパッケージ管理ソフトで調べました。(他に方法あると思う)
(aptitude:パッケージを検索・更新・削除できるコマンド)
# apt-get install -y aptitude
# aptitude search php-mbstring
p php-mbstring
p php-symfony-polyfill-mbstring
p php7.0-mbstring
②intl拡張
・dockerのphp公式イメージが用意したdocker-php-ext-install
で拡張を入れます
・コンテナ内から実行できます。
# docker-php-ext-install intl
③simplexml拡張
・インストール済み(ベースイメージに含まれていたようです)
④mysql拡張
・これを入れてないと、あとでサーバーを起動した時にmysql拡張が無いと怒られます。
# docker-php-ext-install pdo pdo_mysql
php-zip拡張
・後でcomposerでCakePHPのプロジェクトをインストールする時にphp-zipが無いとdistではなく直接sourceからダウンロードすることになり時間がかかります。
zlibインストール
・php-zipをインストールするためにzlibが必要なのでまずはzlibをインストール
# apt-get install -y zlib1g-dev
php-zipインストール
# docker-php-ext-install zip
・php-zipではなくzip
(参考)docker-php-ext-install Reference
composerでCakePHPプロジェクトの作成
# composer self-update && composer create-project -y --prefer-dist cakephp/app my_app_name
サーバー起動
・bin/cake server
でサーバーを起動します。
①bin/cakeの実行権限を付与
・デフォルトではrwのみになっている模様。
# cd my_app_name
# chmod +x bin/cake
②サーバー起動
# bin/cake server -H 0.0.0.0 -p 80
Welcome to CakePHP v3.5.11 Console
---------------------------------------------------------------
App : src
Path: /usr/src/cakephp/cake-pj/src/
DocumentRoot: /usr/src/cakephp/cake-pj/webroot
---------------------------------------------------------------
built-in server is running in http://0.0.0.0:80/
You can exit with `CTRL-C`
引数を指定しないと、http://localhost:8765/
でアクセスできる。
今回docker run
の際にポートを80:80
で指定したので上記のようにホスト、ポートを指定して実行。
これでビルトインサーバーが起動します。
ブラウザから0.0.0.0:80
でアクセスすると表示されます。
exitで終了した後再度起動するとき
# exit
$ docker start -i [コンテナID]
# (再度入れる)
おまけ(便利だったパッケージ)
・apt-file
:特定のファイルが含まれているパッケージを探す
・zlibをインストールする時にパッケージを探す際に使いました。
# apt-file search /usr/include/zlib.h
zlib1g-dev: /usr/include/zlib.h
# apt-get install -y zlib1g-dev
(参考)
http://d.hatena.ne.jp/embedded/20081101/p3
http://www.atmarkit.co.jp/ait/articles/1709/08/news020.html
(参考)
CakePHP インストール
今後
・作成したコンテナからイメージを作成する
・コンテナの内容をDockerfileにする
・mysqlやApacheイメージを作成してdocker-composeで一つにまとめる
少し時間がかかりましたが、OSやコマンドの理解にも繋がったのでよかったです。