#はじめに
自分が悩んだ順に書いていきます。無駄に長いです。
Dockerfileを扱ったのは今回が初めてです。初心者でも読みやすいと思います。
もっといい方法あるよというコメントお待ちしております。
##エラー発生
nojimage/twitter-text-php
Twitterが公式で出しているライブラリがPHPに対応していなかったために導入
ローカル環境で下記コマンドを打つ
composer require nojimage/twitter-text-php
しかし下記のようにエラーが
nojimage/twitter-text-php v3.0.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.
PHPの拡張モジュールであるintl
というものが無いらしい
PHP: intl - Manual
調べると国際化関数のあれこれが入ってるそう。
日本語含め多言語テキストをパースするために必要ってことだろうか。
##intlの追加
docker-php-ext-install
でPHP extensionは追加していけるそうだ。
FROM php:7.?.?-fpm
RUN apt-get update \
&& docker-php-ext-install pdo_mysql (省略) intl #intl追加
これでいけると思いdocker-compose up --build
でコンテナを立ち上げるとエラーが。
configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
どうやらICUというものが必要らしい。
ICUとはInternational Components for Unicodeのことで、
Unicodeに対する便利ライブラリ的なやつ。確かに国際化関数には必要そうだ。
ちなみに
International Christian University(国際基督教大学)でも、
Intensive Care Unit(集中治療室)でもない。
「ICU library」 で調べたら「図書館|国際基督教大学(ICU)」が出てきた
##ICUの追加
今度はdocker-php-ext-install
では入らない
apt-get install
でとってくる必要がある
詳細は割愛するが私は一度ここでapt
ではなくapk
コマンド叩いてエラーになった。
FROM php:7.?.?-fpm
RUN apt-get update \
&& apt-get install -y libicu-dev \ #一行追加
&& docker-php-ext-install pdo_mysql (省略) intl
これでいけると思いコンテナを起動する。起動には成功。
docker exec -it hogehoge bash
でコンテナに入り、
composer require nojimage/twitter-text-php
を再度実行するが、
[RuntimeException]
Failed to clone https://github.com/nojimage/twitter-text-php.git, git was not found, check that it is installed and in your
PATH env.
sh: 1: git: not found
今度はgitが無いと怒られた。Docker内でcomposerを使うには必要らしい。
##gitの追加
FROM php:7.?.?-fpm
RUN apt-get update \
&& apt-get install -y libicu-dev git \ #git追加
&& docker-php-ext-install pdo_mysql (省略) intl
起動、入る、composer
でまたしてもエラー
Failed to download nojimage/twitter-text-php 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.
zipとunzipが無いようだ
##zipとunzipの追加
The zip extension and unzip command
と表記がある通り、
zipはextensionでとれるがunzipはapt-getで入れる必要がある。
FROM php:7.?.?-fpm
RUN apt-get update \
&& apt-get install -y libicu-dev git unzip \ #unzip追加
&& docker-php-ext-install pdo_mysql (省略) intl zip #zip追加
今度は起動時にエラー
configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located
ZLIBが無いよとエラー。圧縮アルゴリズムのライブラリのようだ。
##ZLIBの追加
FROM php:7.?.?-fpm
RUN apt-get update \
&& apt-get install -y libicu-dev git unzip zlib1g-dev \ #zlib追加
&& docker-php-ext-install pdo_mysql (省略) intl zip
この変更を最後に
docker-compose up --build
docker exec -it hogehoge bash
composer require nojimage/twitter-text-php
が通りました
#最後に
Dockerfileも肥大化してしまったのであまりスマートなやり方ではない気が。
インフラ基礎知識が曖昧なままコンテナ技術を使っていたので並行して知識をつけていきたい。
下記の記事を参考にタイトルをつけました
composer install で the requested PHP extension intl is missing from your system と言われる解決方法