PHP
Apache
docker

自分用Memo:DockerにcakePHPをインストールしてみる

初投稿。メモ用。
読むに耐えない文章力。

前回のあらすじ(前回なんて無い)(うろおぼえ)

 CakePHPを教材として、PHPのお勉強をしようと思った。
 ちなみに、OSはmacOS。
 macの場合、LAMPの構築にXAMPPというの使うらしいけど、phpコマンドが上手くいかなかった。
 php-intlが読み込まれてないから、ダメらしい。
 ネットで調べたら、php.iniのphp-intlの書かれた行がコメントアウトされてるので、外すといいらしい的なことが書かれてたので、そのとおりにしたけど、意味なし。(長い)
 mac本体に入ってるphp.iniファイルじゃなくて、XAMPPのほうのphp.iniかもしれなかったけど、見つからなかった。どこそれ?
 brewでインストールしてもダメだった。
 というわけで、最近気になるDockerとやらを使ってみることにした。
 よろしく、Docker。

ベースイメージ

php/7.2.3-apache使ってみた。

参考文献

(--思い出したら書く--)

とりあえずcomposerでcakePHPをインストールしてみた

mkdir php-study
composer create-project --prefer-dist cakephp/app php-study

けど、ダメ。
出力を読むに、git入ってないからだめってことかな?

Installing cakephp/app (3.5.1)
    Failed to download cakephp/app from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    Now trying to download from source
  - Installing cakephp/app (3.5.1): Cloning 84ec633f31


  [RuntimeException]                                                                     
  Failed to clone https://github.com/cakephp/app.git, git was not found, check that it   
  is installed and in your PATH env.                                                     

  sh: 1: git: not found                                                                  

gitをインストールしてからもう一回cakePHPインストール

apt-get install git

そして、もう一回composer。↓

Installing cakephp/app (3.5.1)
    Failed to download cakephp/app from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    Now trying to download from source
  - Installing cakephp/app (3.5.1): Cloning 84ec633f31 from cache
Created project in php-study
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.5.9 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.8 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.7 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.6 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.5 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.4 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.3 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.2 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.14 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.13 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.12 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.11 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.10 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - Installation request for cakephp/cakephp 3.5.* -> satisfiable by cakephp/cakephp[3.5.0, 3.5.1, 3.5.10, 3.5.11, 3.5.12, 3.5.13, 3.5.14, 3.5.2, 3.5.3, 3.5.4, 3.5.5, 3.5.6, 3.5.7, 3.5.8, 3.5.9].

  To enable extensions, verify that they are enabled in your .ini files:
    - 
    - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

intl地獄と名付けたい。

php-intlの導入

 ネットでぱちぱち調べた結果、まずlibicu-devを追加してからintlをインストールするらしい。

libicu-devをインストール

apt-get install -y libicu-dev

そして、intlをインストール

docker-php-ext-install intl

長々とテキストが流れた跡、最後に気になるテキストが。
覚えておくために、コピペ。

creating intl.la
(cd .libs && rm -f intl.la && ln -s ../intl.la intl.la)
/bin/bash /usr/src/php/ext/intl/libtool --mode=install cp ./intl.la /usr/src/php/ext/intl/modules
cp ./.libs/intl.so /usr/src/php/ext/intl/modules/intl.so
cp ./.libs/intl.lai /usr/src/php/ext/intl/modules/intl.la
PATH="$PATH:/sbin" ldconfig -n /usr/src/php/ext/intl/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/src/php/ext/intl/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20170718/
find . -name \*.gcno -o -name \*.gcda | xargs rm -f
find . -name \*.lo -o -name \*.o | xargs rm -f
find . -name \*.la -o -name \*.a | xargs rm -f
find . -name \*.so | xargs rm -f
find . -name .libs -a -type d|xargs rm -rf
rm -f libphp.la       modules/* libs/*

よくわからなかったから、またインストール

こういう姿勢って絶対プログラマとして認められないよなー、とか思いながらcomposerでかけPHPのインストール。

ちなみに、phpのconf.dディレクトリを見たら、docker-php-ext-intl.iniが追加されてた。
php.iniとか作らなくても、大丈夫らしい。

mkdir php-study && composer create-project --prefer-dist cakephp/app php-study

こんなのが大量に出てきたけど、成功したっぽい?
zipやunzipが無かったから、ソースコードを直接ダウンロードしたって理解であってるかな?

  - Installing symfony/var-dumper (v4.0.8): Cloning e1b4d00810 from cache
    Failed to download psy/psysh from dist: The zip extension and unzip command are both missing, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.
    Now trying to download from source

とりあえず、ここで一旦終了。

追記 (4/18)

データベース入ってなかった。終了じゃなかった。

データベースのインストール

なんかいろいろやってたらできた。
たぶんmysql-serverとmysql-clientをインストールすれば良いっぽい?

apt-get install mysql-server mysql-client

あと、mysqlndのphp.iniを追加するといいかも。

docker-php-ext-install pdo_mysql

今度こそ成功?