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

FROM golang AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .

FROM scratch
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]

scratch は、ファイルを何も含まない空のイメージである。上のマルチステージビルドのDockerfileで作った最終のイメージに含まれるものとして、正しいものはどれか。

  1. Abuild の段階で作った実行ファイル /app だけで、Goのコンパイラやソースコードは含まれない
  2. Bbuild の段階と最後の段階の層がすべて重なり、Goのコンパイラ、ソースコード、/app のすべてが含まれる
  3. C最初の FROM の golang イメージとソースコードだけで、/app はコンテナを起動するたびにビルドされる
答えと解説を見る

正解:A. build の段階で作った実行ファイル /app だけで、Goのコンパイラやソースコードは含まれない

マルチステージビルドでは FROM ごとに段階が分かれ、最終のイメージになるのは最後の段階だけです。前の段階はコンパイラなどを使って成果物を作るためのもので、COPY --from で指定したファイルだけが最後の段階に持ち込まれます。ここでは空の scratch の上に /app だけがコピーされるので、Goのコンパイラやソースコードを含まない小さなイメージになります。scratch には共有ライブラリもないので、CGO_ENABLED=0 でほかのライブラリに依存しない実行ファイルを作っています。含まれるものが少ないと、取得が速くなり、攻撃に使える道具や脆弱性の対象も減らせます。

  • A. 正しい。最後の段階に COPY --from で持ち込んだファイルだけが残ります。
  • B. 前の段階の層は最終のイメージに含まれません。最終のイメージは最後の FROM から作られます。
  • C. 最終のイメージのもとは最後の FROM の scratch で、go build はビルドのときに1回だけ実行されます。
この分野を解く 分野ページへ

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

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

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

  1. Kubernetesで、デプロイして管理する最小の単位であり、1つ以上のコンテナをまとめて、同じIPアドレスやボリュームを共有させるものはどれか。
  2. Kubernetesで、replicas: 3 を指定したDeploymentのPodが3つ動いている。このうち1つのPodを kubectl delete pod で削除したときに起きることとして、正しいものはどれか。
  3. KubernetesのDeploymentで、Podのテンプレートのコンテナイメージを新しい版に変更した。既定の更新方式(RollingUpdate)で起きることとして、正しいものはどれか。
  4. replicas: 10 のDeploymentで、ローリングアップデートの設定を maxSurge: 25%、maxUnavailable: 25% とした。更新の途中の、Podの総数の上限と、利用可能なPodの数の下限の組み合わせとして、正しいものはどれか。
  5. Kubernetesで、Podは作り直されるたびにIPアドレスが変わる。ほかのアプリケーションから、ラベルで選んだ複数のPodに、変わらない名前とアドレスで接続して負荷を分散できるようにするリソースはどれか。