はじめに
こんにちは。早速ですが、docker-composeにDBのimageを書いてる人...。
環境変数は使用していますか??
個人が作成しているポートフォリオや個人のWebアプリケーションなどでGitでバージョン管理されている方が多いと思いますが、docker-composeに『直で大切な情報を載せるはあまり良くはない...』ですよね。
そんな時に環境変数を用いて、大切な情報はgitignoreしつつ、一括で管理してしましましょう!!
ではdocker-composeにて楽々できる環境変数の設定の仕方をご紹介します。
ディレクトリの構成図を見ていく
ファイルは2つのみの単純な構成図ですが、載せておきます。笑
sample-project
├ .env # 環境変数を設定するファイル
└ docker-compose.yml
docker-composeと環境変数の設定ファイル.envは同ディレクトリに置かなければいけません。
まず.envの中身を書く
今回は僕がPostgreSQLを使っているので、PostgreSQLで書きますが、設定したい変数を書けばいいだけなので、簡単にカスタムできます。
注意点
必ずファイル名は.env
という名前にしてください。違う名前でも実装できますが少し設定方法が変わってきてしまいます...
それについては後半で紹介しますね(/・ω・)/ コチラで後半まで飛べます
POSTGRES_USER=postgres
POSTGRES_PASSWORD=passworddayo
docker-composeの中身を書く
こんなDBのコンテナのみで使うことなど無いかもしれませんが、余計な情報はなしで書きます。
version: "3"
services:
db:
image: postgres
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
ports:
- "5432:5432"
たったこれだけで実装可能です。
ですがここにたどり着くまで様々な落とし穴があったりします。笑
僕的落とされたポイント
その1→ファイル名は.envにする件について
どうやらdocker-composeの標準装備で同ディレクトリのenvファイルで定義したものを参照してくれるみたいです。公式ドキュメント*1に書かれていことが少なすぎて、『情報量!!!』と叫びましたね。*1 docker docsへはコチラ
.envを指定しない方法
これは簡単に言うと、任意のファイル名を指定して、そのファイル内の定義したもの全てをenvironmentに入れるパターンです。
この方法については、他の方がまとめてくれている記事を紹介します*2↓
*2 docker-composeでenv_fileとenvironmentを同時に設定する際の注意点(Qiita)
その2→environmentに書くのそれだけ?問題
docker-compose.yml
を見ていただくと、evironmentにPOSTGRES_USERとPOSTGRES_PASSWORDを書いているだけですよね。笑
元々PostgreSQLの方でevironmentに設定しなければいけない変数が決まっているのですが、.env
で設定した名前をdocker-compose.yml
で代入するのではなく、直でdocker-compose.yml
に書いてるのです。笑
ですがその方が『環境変数が個別に直感的に設定できる』という意味で、ファイル名を指定してファイル全体を代入するのではなく、変数を指定するやり方が僕的には良いと思ったので、.env
の設定方法を紹介いたしました。
さいごに
最後まで読んでいただきありがとうございました。
間違っている点やシンプルな感想などでもございましたら、お気軽にコメントください!!
実はDjangoにて環境変数を設定する方法をメインに書きたかったのですが、Dockerありきの方法になってしまうんです。なのでそれはまた今度ということで。
DjangoやAWS,Dockerなどのバックエンドを勉強していたり、機械学習にも少し手を出しているわたくしの姿を発信しているTwitterがあるので、もし良ければ...@heacet43
参考文献
*1 Declare default environment variables in file | Docker Documentation [https://docs.docker.com/compose/env-file/]
*2 docker-composeでenv_fileとenvironmentを同時に設定する際の注意点 [https://qiita.com/zawawahoge/items/eeaf2833583949524023]