【Docker】DockerでCodeIgniter4の開発環境を作る:後編

後編ではアプリとMySQL、phpMyAdminのコンテナをセットアップする .docker-compose.yml を作成します。ポート8080にアクセスしたらCodeIgniter4、ポート8081にアクセスしたらp […]

後編ではアプリとMySQL、phpMyAdminのコンテナをセットアップする .docker-compose.yml を作成します。ポート8080にアクセスしたらCodeIgniter4、ポート8081にアクセスしたらphpMyAdminにアクセスできるようにします。

phpMyAdminは開発用に入れているだけなので、ポート番号に特にこだわりはなく、アクセスできれば何でもいいです。また、phpMyAdminとMySQLは公式Dockerイメージを使用しますので、Dockerfileは用意しません。phpMyAdminは開発環境用で、MySQLはCloudSQLを使用しますので、本番環境にはデプロイしません。

.docker-compose.yml

version: '3.9'

services:
  # PHP
  app:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.dev
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  # MySQL
  db:
    image: mysql:8.0.39
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: ci4tutorial
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  # phpMyAdmin
  phpmyadmin:
    image: phpmyadmin
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_USER: root
      PMA_PASSWORD: rootpassword
    ports:
      - 8081:80
    depends_on:
      - db

volumes:
  db_data:

version: 3.9 と書いてありますが、最新のDocker Composeではこのバージョン指定は無視されるらしいので、書く必要はありません。

PHPアプリケーションのコンテナ

アプリケーション部分は、前編で作成したDockerfileを使用します。ビルドコンテキストの位置を、.docker-compose.yml のディレクトリ位置に指定します。Dockerfileの位置を直接指定すると、 /src をDockerに渡すことができませんので、エラーがでます。ビルドコンテキストの位置にDockerfileが無いのと、開発環境用のDockerfileを使って欲しいので、ファイルを直接指定します。ポート番号に8080を指定して、Apacheの80番と接続します。ボリュームは開発マシーンの作業ディレクトリ /src をバインドします。

MySQLコンテナ

MySQLの公式Dockerイメージを使用します。ユーザーは新規で作成していませんが、CloudSQLはrootユーザーを使用できませんので、本来ならここでユーザーを作った方がいいです。データテーブルには ci4tutorial を作成しています。ポートはデフォルトで使用されている3306ポートを使用します。ボリュームは新たに作成して、登録しています。こうすることで、コンテナ自体を削除してもDBデータは残ります。Dockerの構成を変更したときとかに、コンテナをリビルドする必要があるのですが、そういう時に、ボリュームを作っておくと、仮データなどが消えないので管理が楽になります。

phpMyAdminコンテナ

phpMyAdminの公式Dockerイメージを使用します。このイメージの中にもApacheが入っているので、無駄にイメージファイルを肥大化しているのですが、それに気づいたのはこれを書いている今なので、あとからブラッシュアップしていきたいと思います。恐らく、Composerのインストールと同じように、 Docker.dev の方でマルチステージビルドを用いれば良さそうです。その他は特に説明することはありませんが、ポートに8081を指定します。

.dockerignore

# GitやIDEのファイルを無視
.git
.gitignore
.idea
.vscode
.dockerignore
.gcloudignore

# Node.jsやPHPの依存ファイル
node_modules/
vendor/

# キャッシュやログ
*.log
logs/
tmp/

コピーしてほしくないモノを記載するファイルです。とりあえず、よくあるよね的なものを書いてます。最低限必要なものはvendorです。composerからインストールするので、必要がありません。あとは書かなくても問題ありませんが、書かないとイメージファイルが肥大化して容量をどんどん持っていくので気を付けてください。これでも700MB近くありますので…。

コンテナを立ち上げる

最後にコンテナを立ち上げて、CodeIgniter4のWelcomeページが見れて、phpMyAdminにアクセスできればチュートリアル完了です。

docker compose up

コンテナを停止す時は下記で

docker compose stop