初心者向け!docker image(イメージ)とは?コンテナとの違いは何?

パン田@現役エンジニア
こんにちは、パン田(ぱんだ)です。
今回はdocker imageについて説明しますね。

 

まだdocker初心者だ!という人のために

  • docker image(イメージ)とはどんなものか、
  • コンテナと何が違うのか?

について解説していきますね。

画像を使ってなるべく、初心者にこそ分かりやすいように説明しますよ。

この記事を読めば、イメージについての知識は十分だと思います。

 

※ただし、この記事の説明はdockerのコンテナを知っている前提になってますのでご注意を。

docker image(イメージ)とは、コンテナの基になるやつ

dockerコンテナを立ち上げる基になるのがdocker imageです。

docker hubというdockerの公式サイトからpull(ダウンロード)してくることもできるし、自分で作ることもできます。

 

ぼくの場合は乾燥ワカメのスープの素に、お湯を注いでわかめスープにするような感覚で理解をしています。

 

ざっくりしすぎなのでもう少し説明しますね。

docker imageは、

  • コンテナに必要なファイル郡をひとまとめにしたやつ
  • 読み専用なレイヤーが重なってできてる

 

docker image はコンテナに必要なファイル群のまとまり

webサーバならnginxとかapacheに関するプログラムファイルだけが入ったイメージがあります。

 

データベースならMySQLとかmariaDBに関するプログラムだけが入っているイメージ。

そいういつ、1つのアプリケーションとかの単位に関係するプログラムだけが1つのイメージに入っています。

(もちろん、イメージの作り方によりますけど)

 

これがたとえば、virtualboxみたいな仮想マシンのファイルだとlinuxのosに関するファイルとかの不要なものまで入ってきます。

が、docker imageにはそういう不要なものは無くて、MySQLならそれに関係するファイルだけが入っています。

だからdockerはvmよりもファイルサイズが軽いのですよね。

 

dockerイメージは読み込み専用のレイヤー構造。コンテナはイメージに読み書き可能なレイヤを足したやつ。

docker imageはレイヤー構造になっています。

親レイヤーに、子レイヤーが1つずつレイヤーが重なってできています。

1つコマンドを打つと、1つのレイヤができる感じらしいす。

画像の例だと yum instal mysqlのコマンド。

またレイヤーはすべて読み専用。read onlyです。

 

ちょっとイメージしにいですけど、removeするのも1つのレイヤーとして上書きされる感じです。

過去に打ったコマンドの結果は1つのレイヤーとして保存されて後での変更ができません。

なのでインストールとアンインストールを繰り返すとイメージのサイズはどんどん大きくなります。

 

あと、僕はこれを知った時めっちゃわかりやすかったのですが、

docker imageとコンテナの違いは読み書き可能なレイヤがあるかどうかです。

 

※細かくは他にも違いがあるかも。

 

awsとかgcpなどのクラウドサーバを使ってる人向けの説明

awsとかのクラウドサーバを使っていると、最初はAMIからインスタンスを立ち上げますよね。

その関係と似ています。

docker imageからdockerコンテナを立ち上げる。

 

docker imageの継承について

余裕がある人だけ知っておくといいかも?な知識です。

1つのベースイメージを継承して2つのイメージを作った場合に、同一のレイヤーを共有して使う仕様みたいです。

同じレイヤーのデータを複数持たないことで、容量が大きくならないようになっています。

↑の例だとデータとして保持するのはnginxのレイヤ1つ、mysqlのレイヤ1つ、centosのレイヤも1つだけということ。

dockerって賢いですね!

 

まとめ

とまぁこんな感じです。

docker imageについて理解してもらえたでしょうか?

パン田@現役エンジニア
分からないことがあったらメッセージなりコメント頂ければと!