流れ8の5語目 / 10

コンテナ

開発・Linux

CIで落ちたチェックを自分のPCで試そうとしたら、道具のバージョンが合わずにうまくいかない

「自分のPCに入れなくていいよ。CIと同じ道具をコンテナで動かせば、そろうから」
「コンテナ」って、何のことだろう…?

コンテナは、アプリと、それが動くのに必要なもの(ライブラリや設定)をひとまとめにして、ほかと区切って動かすしくみです。

中身ごと持ち運べるので、コンテナを動かすしくみ(Docker など)があるコンピューターなら、ほぼ同じように動きます。

このページで分かること読む 約3分・問題 3問
  • コンテナは、アプリと、それが動くのに必要なもの(ライブラリや設定)をひとまとめにして、ほかと区切って動かすしくみ
  • 中身ごと持ち運べるので、コンテナを動かすしくみ(Docker など)があれば、自分のPC・CI・クラウドでほぼ同じように動く
  • 仮想マシンはOSを丸ごと持つ
  • 代表例は Docker

身近な例えで理解する

港で使う輸送用コンテナは大きさが決まっていて、中身が何でも、同じクレーン・船・トラックで運べます。荷物は箱ごとに分かれていて、ほかの箱とまざりません。

  • 箱に詰めた荷物一式アプリと、動くのに必要なもの
  • 大きさが決まっているので、どの船でも運べるコンテナを動かすしくみがあれば、どのコンピューターでもほぼ同じように動かせる
  • 箱ごとに分かれているほかのコンテナと区切られている
  • 船やクレーンコンテナを動かすしくみ(Docker など)

ただし、本物のコンテナは「運ぶ」ための箱、ITのコンテナは「その場で動かす」ためのしくみという点は違います。

ちょっと確認

Q1先輩のひとこと
先輩「自分のPCでは動いたのにCIだと動かない…それ、コンテナで動かせばそろうよ」

なぜそろう?

例えを外して、実際のしくみ

ここからは実際のしくみ
必要なもの一式を持つ

コンテナの中には、アプリと、それが使うライブラリや設定が入っています。動かすコンピューターにあらかじめ何が入っているかに左右されにくいので、自分のPC・CI・クラウドでほぼ同じように動きます。ただし、コンテナを動かすしくみ(Docker など)は必要で、CPUの種類(x86 と Arm など)が違うと動かないイメージもあります。また、Linux のコンテナは Linux のカーネルを使うので、Windows や Mac では裏で Linux の仮想マシンを動かして使います

区切られている

コンテナは、ほかのコンテナや土台のコンピューターから区切られた中で動きます。1つのコンテナを消しても、ふつうはほかのコンテナには影響しません。ただし、カーネルを共有しているぶん、区切りの強さは仮想マシンほどではありません

仮想マシンとの違い

仮想マシン(→22 仮想化)は、OSを中心部分(カーネル)から丸ごと持ちます。コンテナは土台のOSのカーネルを共有するので、同じ機械の上で、より軽く、より多く動かせます

イメージから作る

コンテナは「イメージ」というひな型から作ります。同じイメージからは、同じ中身のコンテナができます。くわしくは次のページで扱います。代表的な道具は Docker です

このページのまとめ

コンテナ
アプリと必要なものをひとまとめにして、区切って動かすしくみ
同じように動く
中身ごと持ち運べるので、どこで動かしても結果がそろいやすい
仮想マシンとの違い
仮想マシンはOSを丸ごと持つ。コンテナはカーネルを共有して軽い
イメージ
コンテナを作るためのひな型(次のページ)

先輩のひとことの意味

先輩「自分のPCに入れなくていいよ。CIと同じ道具をコンテナで動かせば、そろうから」

「チェック用の道具を自分のPCに直接入れると、バージョンなどがCIとずれやすい。CIと同じ中身のコンテナで動かせば、道具もそのバージョンも同じになるので、同じ結果が出る」という意味です。

練習問題で確かめる

Q24択

コンテナと仮想マシンの違いとして正しいものは?

Q34択

コンテナの説明として正しいものは?

参考資料

ご意見・「これで例えて!」を募集しています

ご意見・ご感想・質問・間違いのご指摘など、何でもお気軽にお寄せください。「この言葉も例えで説明してほしい」「こんな例えなら分かりやすい」という声をもとに、新しいページや例えを作ります。

  • 説明してほしいITの言葉
  • 例えてほしい場面(部活・アルバイト・家事など)
  • 分かりにくかったところ・間違いのご指摘

意見箱は準備中です。

解説・例え・練習問題はすべてオリジナルです。参考にしているのは公式ドキュメントのみです。ご意見・ご感想・間違いのご指摘など、何でもお寄せください。確認してすぐに直します。

LinuCはLPI-Japanの登録商標です。当サイトはLPI-Japanおよび他の企業・団体とは関係ありません。

運営:core