クラウドとコンテナの基礎

$ 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

上のように、データベースの接続先をイメージに書き込まず、コンテナを起動するときに環境変数で渡すようにした。この設計の主な利点として、最も適切なものはどれか。

  1. A環境変数に入れた値は自動で暗号化されるので、パスワードを入れても、ほかの人に読まれることがない
  2. B同じイメージを作り直さずに、ステージングと本番で設定だけ変えて使えるので、試験したものをそのまま本番に出せる
  3. C接続先の情報がイメージの層に入らないので、イメージの層が減り、コンテナの起動が大幅に速くなる
答えと解説を見る

正解:B. 同じイメージを作り直さずに、ステージングと本番で設定だけ変えて使えるので、試験したものをそのまま本番に出せる

設定を環境変数で渡す方法は、The Twelve-Factor App という方法論でも勧められている考え方で、コードとイメージを、それを動かす環境から切り離せます。同じイメージをステージングと本番で使えるので、試験したものと同じものを本番に出せ、接続先を変えるたびにイメージを作り直す必要もありません。ただし、環境変数は暗号化されないので、コンテナの設定やプロセスの情報を見られる人には読まれます。パスワードなどの機密の値は、KubernetesのSecretなどの仕組みで、読める人を絞って渡します。

  • A. 環境変数は暗号化されません。コンテナの設定を調べられる人は、値を読めます。
  • B. 正しい。環境ごとの違いを設定に分けるので、同じイメージを使い回せます。
  • C. 数十バイトの設定の有無で、層の数や起動の時間はほとんど変わりません。主な利点は、イメージを環境から切り離せることです。
この分野を解く 分野ページへ

クラウドとコンテナの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

クラウドとコンテナの基礎のほかの問題

  1. 複数のサービスが連携して動くシステムで、利用者の1つの要求が、どのサービスをどの順に通り、それぞれでどれだけ時間がかかったかを調べたい。オブザーバビリティのためのデータのうち、最も適したものはどれか。
  2. Linuxのコンテナを実現するカーネルの機能のうち、名前空間(namespaces)とcgroups(コントロールグループ)の役割の組み合わせとして、正しいものはどれか。
  3. LinuxのホストでDockerを使い、ホストとは別のディストリビューションをもとにしたイメージからコンテナを起動して、その中で uname -r(カーネルのリリースを表示するコマンド)と cat /etc/os-release(ディストリビューションの情報を表示するコマンド)を実行した。結果の説明として、正しいものはどれか。
  4. コンテナイメージとコンテナの関係の説明として、正しいものはどれか。
  5. あるイメージから起動したコンテナの中で、イメージに含まれている設定ファイル /etc/app.conf を書き換えた。Dockerの一般的なストレージの仕組み(overlay2 など)で起きることとして、正しいものはどれか。