Laravel 6 を Docker 化する。その 6 。データベース URL で Docker 起動時の環境変数で Laravel の使用するデータベースを指定

今回やること

  • DB 設定
    • データベース URL で接続するデータベースを指定できるようにする。環境変数で指定できるようにする。
    • データベース URL の指定がない場合は、コンテナ内の SQLite を使用するようにする。
  • Laravel 6 を Docker 化する。その5 – oki2a24 の続きです。

Laravel コンテナの修正点

データベース URL で接続するデータベースを指定できるようにする。環境変数で指定できるようにする。

こちらの項目を実現するのは、実は何もしなくても大丈夫でした。その代わりに、 Laravel の知識が求められます。

Tip!! .envファイルにあるすべての変数は、サーバレベルやシステムレベルで定義されている、外部の環境変数によってオーバーライドすることができます。

これです。 Docker はコンテナ起動時にコンテナに対して環境変数を渡すことができます。

よって、例えば次のようにすればよく、 Laravel の方には一切変更は必要ありません。

docker container run -d --rm -p 80:80 --name sample_dockerized_laravel6 --env DATABASE_URL=mysql://root:password@mysqlhost/forge?charset=UTF-8 sample_dockerized_laravel6:latest

なお、データベース URL の指定の仕方について、次のページで少し整理しました。

データベース URL の指定がない場合は、コンテナ内の SQLite を使用するようにする。

こちらも簡単で、設定ファイルで接続するデータベースを sqlite にし、接続先としてコンテナ内の空ファイルを指定すれば良いだけです。

そこで、まず設定ファイルの元となる .env.example を次のように修正しました。

$ git diff .env.example
diff --git a/.env.example b/.env.example
index 604b401..d7f8f2f 100644
--- a/.env.example
+++ b/.env.example
@@ -6,12 +6,7 @@ APP_URL=http://localhost

 LOG_CHANNEL=stack

-DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
-DB_PORT=3306
-DB_DATABASE=laravel
-DB_USERNAME=root
-DB_PASSWORD=
+DB_CONNECTION=sqlite

 BROADCAST_DRIVER=log
 CACHE_DRIVER=file

そして、ビルド時の操作でデータベースとなるファイルを作成します。

$ git diff Dockerfile
diff --git a/Dockerfile b/Dockerfile
index ed64838..b14b03a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -30,3 +32,4 @@ RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-av
 RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

 COPY --from=build --chown=www-data:www-data ./app/ .
+RUN touch ./database/database.sqlite

これで、 Laravel の Docker コンテナ起動時にデータベース接続の指定を特に行わなければ、コンテナ内部の database.sqlite が SQLite データベースとして使用されます。

他に行ったこと。

PostgreSQL をデータベースとして使用できるようにする

今までデータベースとして MySQL しか使ってきませんでした。たまたま PostgreSQL も使ってみようと思いましたけれども、そのための準備が整っていないことが明らかになりました。

その対処を行っています。

Docker Compose で動かすサンプルを追加する

次のシンプルな docker-compose.yml を書きました。 DATABASE_URL で、データベースを指定する例です。

version: '3.5'

services:
  app:
    build:
      context: ./
      dockerfile: ./Dockerfile
    environment:
      - DATABASE_URL=pgsql://laravel:secret@db:5432/laravel?charset=utf8&prefix_indexes=true&schema=public&sslmode=prefer
    ports:
      - "80:80"
  db:
    image: postgres:12
    environment:
      - POSTGRES_PASSWORD=secret
      - POSTGRES_USER=laravel
      - POSTGRES_DB=laravel

おわりに

コード全体です。

以上です。

コメントを残す

コメントを残す