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

FROM python:slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

上のDockerfileで、docker build でイメージを作るときに実行されるコマンドと、docker run でコンテナを起動するときに実行されるコマンドの組み合わせとして、正しいものはどれか。

  1. Abuild のとき:pip install、run のとき:python app.py
  2. Bbuild のとき:pip install と python app.py、run のとき:python app.py
  3. Cbuild のとき:なし、run のとき:pip install と python app.py
答えと解説を見る

正解:A. build のとき:pip install、run のとき:python app.py

RUN は、イメージを作るときにコマンドを実行し、その結果(ここではインストールされたライブラリ)を新しい層としてイメージに保存します。CMD は、コンテナを起動したときに実行する既定のコマンドを、イメージの設定として記録するだけで、ビルドのときには実行されません。そのため、ライブラリのインストールはビルドの1回で済み、コンテナを起動するたびに python app.py が実行されます。docker run でイメージ名の後ろにコマンドを書くと、CMD の内容はそのコマンドに置き換わります。

  • A. 正しい。RUN はビルドのとき、CMD は起動のときに実行されます。
  • B. CMD はビルドのときには実行されません。起動のときの既定のコマンドを記録するだけです。
  • C. RUN はビルドのときに実行され、結果がイメージに保存されます。起動のたびにインストールし直すことはありません。
この分野を解く 分野ページへ

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

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

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

  1. 上のDockerfileから作ったイメージ pinger を、docker run pinger example.com として起動した。コンテナの中で実行されるコマンドとして、正しいものはどれか。
  2. ポート80で待ち受けるWebサーバのイメージ nginx から、上のコマンドでコンテナを起動した。ホストのIPアドレスを 192.0.2.10 とし、ファイアウォールなどの制限はないものとする。同じネットワークにある別のPCのブラウザから、このWebサーバに接続するURLとして、正しいものはどれか。
  3. 上の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 より短くなる時間として、正しいものはどれか。
  4. Dockerで、コンテナが書いたデータを残すための名前付きボリュームとバインドマウントの説明として、正しいものはどれか。
  5. イメージを registry.example.com/team/web:1.4 と指定して取得(pull)する。この指定の各部分の意味の組み合わせとして、正しいものはどれか。