【Docker】DockerでCodeIgniter4の開発環境を作る:おまけ

phpMyAdminをマルチステージビルドでインストールしようとして、結局うまくいかなくて諦めたので、それについて書いておこうと思います。 問題:phpMyAdminにはアクセスできるけどログインできない この問題がずっ […]

phpMyAdminをマルチステージビルドでインストールしようとして、結局うまくいかなくて諦めたので、それについて書いておこうと思います。

問題:phpMyAdminにはアクセスできるけどログインできない

この問題がずっと解決しなくて、これを解決するために、かなりの時間を費やしましたが問題も解決しなくて、情報もあまりないので、結局phpMyAdminを別でコンテナを作成することにしました。ちなみに、CodeIgniter4側からは普通にDBアクセスできていましたので、マルチステージビルドしたphpMyAdmin固有の問題です。

この問題を解決するために多くの時間を費やして、解決したとしても、得られるものは /phpMyAdmin でアクセスができることと、容量の節約のみで、実際にデプロイするアプリには何も影響がありませんので、費やす労力と見合っていないと判断して、容量役500MBを犠牲に、労力を節約しました。

結論:phpMyAdminは別コンテナで用意

もし、マルチステージビルドでphpMyAdminをインストールして、DBにログインできている方がいらしたら、どのような設定を行ったのか、是非お聞かせ願いたいです。

自分の場合は費やす労力に対して、得られる対価が見合っていないと判断して、この問題の解決は諦めました。でも、phpMyAdminをマルチステージビルドでインストールする方が、最適化されているように思えるので、もし解決策が見つかれば、その方法を使いたいと思います。

最終形

最終的にphpMyAdminのコンテナを作成して、この開発環境用にネットワークを設定するように変更を加えましたので、最終形を記載しておきたいと思います。サービス名とかポート番号とかも変更を加えてますので、ご注意ください。

Dockerfile.dev

# ベースイメージにPHP8.3-Apacheを使用
FROM php:8.3-apache

# マルチステージビルドでComposerをインストール
COPY --from=composer:2.7.9 /usr/bin/composer /usr/bin/composer

# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
    libicu-dev \
    libonig-dev \
    libzip-dev \
    unzip \
    && docker-php-ext-install pdo pdo_mysql mysqli intl

# Apacheのmod_rewriteを有効化
RUN a2enmod rewrite

# アプリケーションコードをコンテナにコピー
COPY ./src /var/www/html/

# Composerで開発用の依存関係もインストール
RUN composer install --prefer-dist --optimize-autoloader --working-dir=/var/www/html

# writableディレクトリに書き込み権限を付与
RUN chown -R www-data:www-data /var/www/html/writable && chmod -R 775 /var/www/html/writable

# ApacheのDocumentRootをCodeIgniterのpublicディレクトリに変更
RUN sed -i 's|/var/www/html|/var/www/html/public|' /etc/apache2/sites-available/000-default.conf

# PHPの設定ファイルをコピー
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

# Apacheが使用するポート80を公開
EXPOSE 80

# Apacheの起動
CMD ["apache2-foreground"]

docker-compose.yml

services:
  # PHP
  app:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.dev
    ports:
      - "8000:80"
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOSTS=db
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db
    networks:
      - network

  # MySQL
  db:
    image: mysql:8.0.39
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: aidataanalyzer
      MYSQL_USER: developer
      MYSQL_PASSWORD: developer
      TZ: Asia/Tokyo
    ports:
      - "3306:3306"
    volumes:
      - volume:/var/lib/mysql
    networks:
      - network
  
  # phpMyAdmin
  phpmyadmin:
    image: phpmyadmin:latest
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_USER: developer
      PMA_PASSWORD: developer
    ports:
      - "8080:80"
    networks:
      - network

volumes:
  volume:

# 定義されたネットワーク
networks:
  network:
    driver: bridge