コンテナイメージとは

こんてないめーじ

コンテナを作るもとになる読み取り専用のひな形。アプリケーションの実行ファイル、ライブラリ、設定などのファイルを層(レイヤ)に分けて重ね、起動するコマンドなどの設定を付けたもので、OSのカーネルは含まない。Dockerfileなどから作られ、レジストリに保管して配布する。リポジトリ名とタグ(例: web:1.4)で指定するほか、中身から計算したダイジェスト(sha256:…)で一意に指定できる。同じ層は複数のイメージで共有される。

「コンテナイメージ」は、1分野の3問の練習問題に出てきます(クラウドとコンテナの基礎など)。

この用語の分野: クラウドとコンテナの基礎

層の仕組み

Dockerfileの命令のうちファイルを変えるもの(RUN、COPY など)が、それぞれ1つの層になります。層は中身から計算したダイジェストで識別されるので、同じベースイメージを使うイメージどうしは、その層をダウンロードもディスクも1回分で共有できます。後の層でファイルを削除しても、前の層の中身はイメージに残るので、大きな一時ファイルは同じ命令の中で消すか、マルチステージビルドで最終のイメージに入れないようにします。

タグとダイジェスト

タグは web:1.4 や latest のように人が付ける名前で、後から別のイメージに付け替えられます。ダイジェストはイメージの中身から計算した値で、中身が1ビットでも違えば変わります。本番の環境や、試験したものと同じものを確実に使いたい場面では、ダイジェストで指定します。

小さく安全なイメージにする

実行に不要なコンパイラやパッケージ管理ツールを含めないと、イメージは小さくなり、取得が速く、脆弱性の対象も減ります。マルチステージビルドで、ビルド用の段階と実行用の段階を分けるのが代表的な方法です。秘密の値はイメージに入れず、起動するときに渡します。

コンテナイメージの練習問題に挑戦

コンテナイメージとコンテナの関係の説明として、正しいものはどれか。

  1. Aコンテナを停止すると、コンテナの中で変更した内容が自動でイメージに書き戻され、もとのイメージが上書きされる
  2. Bイメージは読み取り専用のひな形で、1つのイメージから、それぞれ書き込み可能な層をもつ複数のコンテナを起動できる
  3. C1つのイメージから同時に起動できるコンテナは1つだけで、2つ目を起動するには、イメージを別の名前で複製しておく必要がある
答えと解説を見る

正解:B. イメージは読み取り専用のひな形で、1つのイメージから、それぞれ書き込み可能な層をもつ複数のコンテナを起動できる

イメージは、アプリケーションの実行に必要なファイルと設定をまとめた読み取り専用のひな形で、コンテナはイメージから作られた実行の単位です。コンテナを作ると、イメージの層の上に、そのコンテナ専用の書き込み可能な層が重ねられます。そのため、1つのイメージから多数のコンテナを起動でき、各コンテナでの変更は、ほかのコンテナやイメージに影響しません。変更をイメージとして残したい場合は、Dockerfileを直してイメージを作り直すのが一般的です。

KubernetesのDeploymentで、Podのテンプレートのコンテナイメージを新しい版に変更した。既定の更新方式(RollingUpdate)で起きることとして、正しいものはどれか。

  1. A新しいReplicaSetを作り、新しい版のPodを増やしながら古い版のPodを減らす。古いReplicaSetは、ロールバック用にPodが0で残る
  2. B動いているPodの中のコンテナイメージが、Podを作り直さずにその場で新しい版に入れ替えられるので、PodのIPアドレスも名前も変わらない
  3. C古い版のPodをすべて同時に削除してから、新しい版のPodをまとめて作るので、更新の間は一時的にサービスが止まる
答えと解説を見る

正解:A. 新しいReplicaSetを作り、新しい版のPodを増やしながら古い版のPodを減らす。古いReplicaSetは、ロールバック用にPodが0で残る

Deploymentは、Podのテンプレートが変わると、新しいテンプレートのReplicaSetを作り、新しいPodが準備できたことを確かめながら、古いReplicaSetのPodを少しずつ減らします。そのため、更新の間も一定の数のPodが要求を処理し続けます。古いReplicaSetはPodが0の状態で残されるので、kubectl rollout undo で前の版に戻せます。全部のPodを先に消してから作り直す方式は Recreate で、明示的に指定したときに使われます。

よくある質問

イメージとコンテナは何が違いますか?

イメージは読み取り専用のひな形で、コンテナはそこから作られた実行中(または停止中)の実体です。1つのイメージから多数のコンテナを作れ、各コンテナには専用の書き込み可能な層が付きます。プログラムのファイルとプロセスの関係に似ています。

latest タグを使えば常に最新の版になりますか?

latest は特別な意味をもたない、ふつうのタグです。タグを省略したときに使われる既定の名前にすぎず、だれかが付け替えない限り新しい版を指すとは限りません。版を固定したいときは、具体的なタグかダイジェストで指定します。

「コンテナイメージ」が出てくる問題(3問)

  1. コンテナイメージとコンテナの関係の説明として、正しいものはどれか。
  2. KubernetesのDeploymentで、Podのテンプレートのコンテナイメージを新しい版に変更した。既定の更新方式(RollingUpdate)で起きることとして、正しいものはどれか。
  3. CI/CDのパイプラインで作ったコンテナイメージを、ステージング環境で試験し、合格した。このイメージを本番環境に出す方法として、最も適切なものはどれか。

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

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

関連する用語

コンテナ Kubernetes Pod CI/CD(継続的インテグレーション・継続的デリバリー) 環境変数 IaC(Infrastructure as Code) アベイラビリティゾーン イミュータブルインフラストラクチャ オートスケーリング オブザーバビリティ

用語集の一覧へ