後編ではアプリと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