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

FROM node:lts
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "dist/server.js"]

上のDockerfile(B)は、COPY . . の後に RUN npm ci を置いていたDockerfile(A)を、依存関係のファイルだけを先にコピーする順序に変えたものである。npm ci には120秒、npm run build には30秒、COPY . . には2秒かかり、ほかの命令の時間は無視できるものとする。1日に20回、src の下のソースコードだけを変えて(package.json と package-lock.json は変えずに)イメージを作り直す。前回のビルドのキャッシュが使えるとき、1日のビルド時間の合計で、B が A より短くなる時間として、正しいものはどれか。

  1. A2分
  2. B約11分
  3. C40分
答えと解説を見る

正解:C. 40分

ビルドのキャッシュは命令ごとに使われ、COPY では、コピーするファイルの中身が前回と同じかどうかで判断されます。ある命令のキャッシュが使えなくなると、それより後の命令はすべて実行し直しになります。A では最初の COPY . . の時点で変化が見つかるので、毎回 2 + 120 + 30 = 152秒かかります。B では package.json と package-lock.json が変わっていないので npm ci までキャッシュが使え、COPY . . と npm run build の 2 + 30 = 32秒で済みます。差は1回あたり120秒、20回で2,400秒 = 40分です。

  • A. 1回のビルドでの差(120秒 = 2分)です。1日に20回作り直すので、20倍になります。
  • B. B の1日の合計(32秒 × 20 = 640秒、約11分)で、A との差ではありません。
  • C. 正しい。(152 − 32) × 20 = 2,400秒 = 40分です。
この分野を解く 分野ページへ

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

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

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

  1. Dockerで、コンテナが書いたデータを残すための名前付きボリュームとバインドマウントの説明として、正しいものはどれか。
  2. イメージを registry.example.com/team/web:1.4 と指定して取得(pull)する。この指定の各部分の意味の組み合わせとして、正しいものはどれか。
  3. scratch は、ファイルを何も含まない空のイメージである。上のマルチステージビルドのDockerfileで作った最終のイメージに含まれるものとして、正しいものはどれか。
  4. Kubernetesで、デプロイして管理する最小の単位であり、1つ以上のコンテナをまとめて、同じIPアドレスやボリュームを共有させるものはどれか。
  5. Kubernetesで、replicas: 3 を指定したDeploymentのPodが3つ動いている。このうち1つのPodを kubectl delete pod で削除したときに起きることとして、正しいものはどれか。