まとめ
- バージョンを切り替えたい気持ちは今のところないので
.env
は用意しなかった。 - イメージに tbls を追加するので Dockerfile を用意した。
- volumes に DB データを永続化するようにした。
.env
は用意しなかった。<php>
要素 (PHP INI 項目や定数、グローバル変数の設定) では、既存の環境変数は上書きされない。上書きしたいならば、 force
属性を使う。
ドキュメントはこちら。といいますか、 phpunit.xml で検索して最初のページでした。
docker-compose
コマンドだけで環境をうまく切り替える方法docker-compose -f
オプションを使うことで、使用する YAML ファイルを取捨選択できるようになった。これを利用して、開発環境用ではボリューム共有を使い、サーバ環境用では別のサービスを追加する、といったことが可能になる。docker-compose -f
オプションで毎回 YAML ファイルを指定するのはとても手間がかかるが、解決することができる。Compose の設定に用いられる環境変数のデフォルト値を .env
という 環境ファイル で行うことができる。このファイルに COMPOSE_FILE
という CLI 変数 を定義し、その値に使用する YAML ファイルを指定することで -f
オプションを省略することができる。.devcontainer/devcontainer.json
が独自の設定ファイル。 .devcontainer/docker-compose.yml
はただの Docker Compose ファイル。.devcontainer/devcontainer.json
と .devcontainer/docker-compose.yml
の難しい箇所は本投稿の続きに記載した。以前、 Dockerfile を書かないで docker-compose.yml だけで Node.js 開発環境を用意する方法 にて Node.js のシンプルな開発環境を docker-compose.yml を使用して構築しました。
今回、 Vue.js を使ったアプリをお試しで作りたいです。この時、前回だけでは環境が足りませんでしたので、ノートいたします。
ちょっとお試しで Vue Material Design Component Framework — Vuetify.js に入門したいと思いました。
この時、 Docker を使って開発環境を用意しようと思いましたけれども、最初は Dockerfile を使ってあれこれチューニングすることなく、シンプルに始めたかったのです。
そのために少し調べるような手間が発生しましたので、今後のためにメモしておきます。
oki2a24/sample_dockerized_laravel6: Laravel6 を Docker 化するサンプルです。 にて Laravel を Docker コンテナ化しました。
Apache 入りの PHP コンテナで Laravel を動かしています。この Laravel で タスクスケジュール 6.x Laravel も行いたいと思いました。
cron を動かせば簡単です。
しかし、 コンテナではすでに Apache のプロセスが動いており、ここに cron を足せません。
これを、なんとかしたのが本投稿となります。
composer.json
の php artisan
コマンドに、 --env=laravel
といったオプションが不要になる。--env=laravel
オプションを付けなくとも (.env.laravel
を読み込むように環境変数 APP_ENV に laravel を付けることで) php artisan
コマンドを使えるようにするので、こちらの方が統一されており、望ましいと言える。"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
を修正する。例えば、 "@php -r \"file_exists('.env.laravel') || copy('.env.laravel.example', '.env.laravel');\""
とする。@php artisan package:discover --ansi
を修正する。例えば、 @php artisan package:discover --ansi --env=laravel
とする。@php artisan key:generate --ansi
を修正する。例えば、 @php artisan key:generate --ansi --env=laravel
とする。APP_ENV=laravel
とする。
ENV APP_ENV laravel
などと書く。POSTGRES_INITDB_ARGS
で設定することで、ロケールをなし (C) に設定可能
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --locale=C
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
<= 注意。コッチっは試していない。docker run --rm -it -e POSTGRES_PASSWORD=secret -e POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C" postgres:12.2 bash
といった書式になる。-connprops useSSL\\=false
、 (こちらはうろ覚えだが) property ファイルでは schemaspy.connprops=useSSL\=false
と書く必要があり (試していないが schemaspy.connprops="useSSL\=false"
や schemaspy.connprops="useSSL=false"
でもいいのかも) 、ややこしかった。