Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
概要(Overview・Refs Issue)
docker-compose
を用いたスムーズな開発環境構築への対応。docker
コマンドと比較して、よりポートやボリューム設定等の共有も簡単かつ確実になるため。方針(Policy)
基本方針
4.0開発者向けドキュメントの「Dockerを使用してインストールする」の内容を基本的に再現する。
上記「Dockerを使用してインストールする」との相違点
以下の点に関しては利便性を考慮し、マウントの対象を変更しています。
[従来のマウント対象]
/app
,/html
,/src
のみを同期[本対応でのマウント対象]
パフォーマンス影響の大きい
/var
,/vendor
以外の全てを同期[メリット]
.env
等を編集可能になる利用方法
Docker Composeを使用してインストールする
前提として、 Docker Desktop のインストール{:target="_blank"} が必要です。
2回目以降の起動時も同様のコマンドを使用します。
各種サービスの使用
EC-CUBE 4のWebサーバを含め、以下のサービスが簡単に起動できるようにしています。
コンテナの起動時にサービス名を列挙することで、各種サービスを起動出来ます
各種サービスと連携させる場合は、以下の通り設定が必要です
メール送信を使用する場合
.env
にてMAILER_URL=smtp://mailcatcher:1025
としておくlocalhost
上(デフォルトポート:1080)で構築した場合、以下URLにてアクセスします。http://localhost:1080
PostgreSQL を使用する場合
.env
にてDATABASE_URL=pgsql://dbuser:secret@postgres/eccubedb
としておくデータベーススキーマを初期化していない場合は、以下を実行する
MySQL を使用する場合
.env
にてDATABASE_URL=mysql://dbuser:secret@postgres/eccubedb
としておくデータベーススキーマを初期化していない場合は、以下を実行する
ファイルの同期
docker-composeを用いてインストールした場合、ホストのローカルディレクトリとコンテナ上のファイルは同期します。
.env
等の設定ファイルについても、ホスト上のファイルを直接編集します。なお、一部環境において著しいパフォーマンスの劣化が発生する場合があるため、以下のフォルダは同期の対象から除外しています。
これらについては
volume
を用いてパフォーマンスを損なわない形で永続化しています実装に関する補足(Appendix)
Dockerfile内での一部インストールのスキップについて
現状Dockerfile内でDBのマイグレーションまで行ってしまっているため、この時点で起動していないMySQLやPostgresアクセスできずビルドが失敗してしまいます。
そのため、環境変数の指定で該当のインストールスクリプトをスキップ可能とすることで対応しています。
https://github.com/m-pyon23/ec-cube/blob/51372d5ca55b4397d41cbe5d88fd1df45bfa0cec/Dockerfile#L84-L90
https://github.com/m-pyon23/ec-cube/blob/51372d5ca55b4397d41cbe5d88fd1df45bfa0cec/docker-compose.yml#L23-L29
この時はキャッシュ作成・DBマイグレーションのため、初回のコンテナ作成後に
eccube:install
、もしくはそれに準じるコマンドを実行する必要があります(1度実行した後は
/var
volume内にキャッシュが永続化されている状態になるため、再度の実行は不要)ディレクトリのマウント方法について
ローカルのフォルダを全てマウント対象にした上で、除外したい部分(
/var
,/vendor
)のみvolume
に格納するよう指定することで、高コストなローカルとの同期を切り、低コストなvolume上で永続化するようにしています。https://github.com/m-pyon23/ec-cube/blob/51372d5ca55b4397d41cbe5d88fd1df45bfa0cec/docker-compose.yml#L33-L37
テスト(Test)
+(Docker for Mac環境で特に低下しやすい認識のため、お持ちの方に確認をお願いしたいです)
相談(Discussion)
1. 環境変数類の記述場所
一般的には
docker-compose.yml
で使用する環境変数(各種ポートマッピングや、MySQLコンテナで作成するDB情報等)は.env
ファイル内に記載するものですが、追加しても良いでしょうか?現状はとりあえず
docker-compose.yml
に直接記載しています。2. Dockerfile内のインストールスクリプト回避の是非
前述の通り、Dockerfile内で
composer run-script installer-script
を実行する場合、イメージビルドdocker-compose build
の段階でDBに接続出来ないとエラーになるという状態になり、DBコンテナを活かせないため、環境変数による回避手段を設けました。若干力業感があるため、何か他に良い手段があれば検討したいです。
※本来であれば、そもそもDBマイグレーションやキャッシュ生成等はイメージのビルド時ではなく、コンテナの初回起動時に
docker-entrypoint-initdb.d
のようにENTRYPOINTで実施したりするのが適切かと思います。マイナーバージョン互換性保持のための制限事項チェックリスト
レビュワー確認項目