
じろう
2019年11月02日に参加
学習履歴詳細
[Docker][Laravel]postgresのコンテナ立ち上げ成功、migrateできた。GD Libraryを入れるのに苦戦するもなんとか入れて画像投稿も出来るようになった
今日のYWT
やったこと
Travelog
Dockerでpostgres使えるように
- postgresqlを使うためのドライバを入れた
DockerにGD Libraryをインストールして画像を圧縮できるように
- 画像投稿時にGD libraryがないよというエラーが出たので入れたい
- Dockerfileに記述してインストール
わかったこと
postgresのインストールとマイグレーション
libpq-dev, libzip-dev
を追記し、docker-php-ext-install pdo_pgsql zip
で pdo_pgsqlのインストールをする。
で、build
してup -d
し、
docker-compose exec app bash
でコンテナに入り、
php artisan migrate
で無事成功!
GD Libraryの入れ方
画像の圧縮にIntervention Imageを使っているが、これにGD libraryが必要。
元のDockerfile
FROM php:7.3-fpm-buster SHELL ["/bin/bash", "-oeux", "pipefail", "-c"] # timezone environment ENV TZ=UTC \ # locale LANG=en_US.UTF-8 \ LANGUAGE=en_US:en \ LC_ALL=en_US.UTF-8 \ # composer environment COMPOSER_ALLOW_SUPERUSER=1 \ COMPOSER_HOME=/composer COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer # multi state build 容量を削減するための小技 RUN apt-get update && \ apt-get -y install git libicu-dev libonig-dev libzip-dev libpq-dev unzip locales && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ locale-gen en_US.UTF-8 && \ localedef -f UTF-8 -i en_US en_US.UTF-8 && \ mkdir /var/run/php-fpm && \ docker-php-ext-install intl pdo_mysql zip bcmath && \ docker-php-ext-install pdo_pgsql zip && \ composer config -g process-timeout 3600 && \ composer config -g repos.packagist composer https://packagist.org COPY ./docker/php-fpm/zzz-www.conf /usr/local/etc/php-fpm.d/zzz-www.conf COPY ./docker/php-fpm/php.ini /usr/local/etc/php/php.ini WORKDIR /work
この状態で画像をアップロードしようとすると
Intervention\Image\Exception\NotSupportedException GD Library extension not available with this PHP installation.
と、EC2へデプロイした本番環境でも見たことあるエラー。これはGD Libraryがないのね、とsudoコマンドで入れようとするも……
sudo apt-get install php7.0-gd bash: sudo: command not found
今度はsudo
コマンドが無いと言われてしまう。
また、これはコンテナにインストールするだけで、ボリュームが消えたら何も残らないとメンターさんからの指摘。確かに……。
Dockerfileに書こう
というわけで、ビルドするときにインストールする。
FROM php:7.3-fpm-buster SHELL ["/bin/bash", "-oeux", "pipefail", "-c"] # timezone environment ENV TZ=UTC \ # locale LANG=en_US.UTF-8 \ LANGUAGE=en_US:en \ LC_ALL=en_US.UTF-8 \ # composer environment COMPOSER_ALLOW_SUPERUSER=1 \ COMPOSER_HOME=/composer COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer RUN apt-get update && \ apt-get -y install git libicu-dev libonig-dev libzip-dev libpq-dev libjpeg-dev libpng-dev unzip locales && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ locale-gen en_US.UTF-8 && \ localedef -f UTF-8 -i en_US en_US.UTF-8 && \ mkdir /var/run/php-fpm && \ docker-php-ext-install intl pdo_mysql zip bcmath gd && \ docker-php-ext-install pdo_pgsql zip && \ docker-php-ext-configure \ gd --with-png-dir=/usr/include --with-jpeg-dir=/usr/include && \ composer config -g process-timeout 3600 && \ composer config -g repos.packagist composer https://packagist.org COPY ./docker/php-fpm/zzz-www.conf /usr/local/etc/php-fpm.d/zzz-www.conf COPY ./docker/php-fpm/php.ini /usr/local/etc/php/php.ini WORKDIR /work
docker-php-ext-install intl pdo_mysql zip bcmath
にgd
を追記。
docker-php-ext-configure \ gd --with-png-dir=/usr/include --with-jpeg-dir=/usr/include && \
この2行も追記して解決。
次やること
- 動作確認
docker-php-ext-configure
って何?を調べる
Docker
Laravel
PostgreSQL
2020年12月17日(木)
2.7時間