じろう

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 bcmathgdを追記。

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時間