クラウドとコンテナの基礎
$ docker run -d -e DB_HOST=db.staging.example.com web:1.4.2
$ docker run -d -e DB_HOST=db.prod.example.com web:1.4.2上のように、データベースの接続先をイメージに書き込まず、コンテナを起動するときに環境変数で渡すようにした。この設計の主な利点として、最も適切なものはどれか。
- A環境変数に入れた値は自動で暗号化されるので、パスワードを入れても、ほかの人に読まれることがない
- B同じイメージを作り直さずに、ステージングと本番で設定だけ変えて使えるので、試験したものをそのまま本番に出せる
- C接続先の情報がイメージの層に入らないので、イメージの層が減り、コンテナの起動が大幅に速くなる
答えと解説を見る
正解:B. 同じイメージを作り直さずに、ステージングと本番で設定だけ変えて使えるので、試験したものをそのまま本番に出せる
設定を環境変数で渡す方法は、The Twelve-Factor App という方法論でも勧められている考え方で、コードとイメージを、それを動かす環境から切り離せます。同じイメージをステージングと本番で使えるので、試験したものと同じものを本番に出せ、接続先を変えるたびにイメージを作り直す必要もありません。ただし、環境変数は暗号化されないので、コンテナの設定やプロセスの情報を見られる人には読まれます。パスワードなどの機密の値は、KubernetesのSecretなどの仕組みで、読める人を絞って渡します。
- A. 環境変数は暗号化されません。コンテナの設定を調べられる人は、値を読めます。
- B. 正しい。環境ごとの違いを設定に分けるので、同じイメージを使い回せます。
- C. 数十バイトの設定の有無で、層の数や起動の時間はほとんど変わりません。主な利点は、イメージを環境から切り離せることです。