LoginSignup
2
1

Docker環境で環境変数を扱う

Posted at

はじめに

より便利によりセキュアなシステムを作る上で環境変数は非常に重要です。
今回はdocker環境での環境変数の扱いかたについて解説していきたいと思います。

目次

  1. 環境変数とは
  2. envファイルで環境変数を扱う方法
  3. dockerfileでENVを用いて環境変数を扱う方法
  4. おまけ AWSでの環境変数管理
  5. 参考文献

環境変数とは

OSが設定値などを永続的に保存し、利用者や実行されるプログラムから設定・参照できるようにしたもの。プログラムの実行時などに必要となる、利用者やコンピュータごとに内容が異なる設定値などを記録するために用いられるとのこと。
APIキーやパスワードなどソースコードに直接書かないときに使うことが多いです。またenvファイルは.gitignoreで指定して、github等で公開しないことがほとんどです.

envファイルを用いて環境変数を扱う方法

今回は例としてfastapiでデータベースへ接続を行う際のデータベースの情報を.envファイルで管理します.
まずdockr-compose.ymlに環境変数を参照する先を書きます
docker-compose.yml

version: "3"
services:
  api:
    env_file:
      - ./api/.env

次に.envにデータベースへ接続するための情報を書きます
.env

DB_USER="mysqluser"
DB_PASSWORD="mysqlpass"
DB_HOST="db:3308"
DB_NAME="sample_db"

db.py
os.environ.getで.envに記述した情報を取得します.

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
from dotenv import load_dotenv
import os

load_dotenv()

user = os.environ.get("DB_USER")
password = os.environ.get("DB_PASSWORD")
host = os.environ.get("DB_HOST")
db_name = os.environ.get("DB_NAME")

DATABASE = 'mysql://%s:%s@%s/%s?charset=utf8' % (
    user,
    password,
    host,
    db_name,
)

ENGINE = create_engine(
    DATABASE,
    echo=True
)

session = scoped_session(
    sessionmaker(
        autocommit=False,
        autoflush=False,
        bind=ENGINE
    )
)

Base = declarative_base()
Base.query = session.query_property()

dockerfileでENVを用いて環境変数を扱う方法

こちらの方法はシンプルです.主観にはなりますが、envファイルを用いたやり方の方が主流だと思います.
Dockerfile

FROM python:3.7

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

docker-compose.yml

version: "3"
services:
  db:
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: sample_db
      MYSQL_USER: mysqluser
      MYSQL_PASSWORD: mysqlpass

おまけ AWSでの環境変数管理

アプリケーションをAWSでデプロイする際、秘匿したい情報は次のサービスを利用します.
AWS System Manager Parameter Store

参考文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1