LoginSignup
6
9

More than 5 years have passed since last update.

DockerでcakePHP環境構築(〜ブラウザ表示まで)

Posted at

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やコマンドの理解にも繋がったのでよかったです。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9