0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

さわっておぼえるDocker入門🐳#4(コンテナはなぜ軽いか)

Posted at

はじめに

Dockerコンテナはなぜ軽いのか、仮想マシンに比べて高速で動作するのかを確認します。

目的

Dockerを触りながら、コンテナイメージとコンテナレイヤーについて確認する

今回は、下記の操作を行います。

  • タグを指定してイメージをDockerHubからダウンロード
  • pull済みのイメージを確認
  • 同一イメージに複数のタグをつけて管理
  • イメージのレイヤーを確認

環境

  • macOS Mojave 10.14.6
  • Docker engine 19.03.5

まずはDockerのインストール

コンテナをアレコレしてみる

コンテナのタグ

コンテナにはタグがついています。

DockerHubのイメージを見てみると、バージョンlatest mainlineなど、タグがついています。

また、タグを指定してイメージをpullすることができるようになっています。

Docker Pull

タグを指定して、3つのnginxイメージをpullしてみます。

# latestタグを指定してイメージをpull
docker pull nginx:latest
# mainlineタグを指定してイメージをpull
docker pull nginx:mainline
# mainline-alpineタグを指定してイメージをpull
docker pull nginx:mainline-alpine

Alpine Linuxは超軽量セッティングのOSです。

Docker image ls

今pullしたイメージを確認するには、以下のコマンドを実行します。

docker image ls

先ほどpullしたイメージが以下のように表示されました。

$ docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
nginx                   latest              ed21b7a8aee9        12 days ago         127MB
nginx                   mainline            ed21b7a8aee9        12 days ago         127MB
nginx                   mainline-alpine     377c0837328f        5 weeks ago         19.7MB

latestmainlineの「IMAGE ID」が同じになっています。

あれ?なんでかな?

とおもったのですが、これがコンテナイメージの肝です。

つまり、latestのイメージとmainlineのイメージは、実は同一の内容なのです。

イメージはコンテナのメタデータ

そもそもイメージとはコンテナのメタデータであり、起動時の設定です。

内容が同じであれば、Dockerはうまくそれを利用して使い回すことができます。

docker image lsで出力された内容をみると、127MBのイメージが2つあるように見えますが、実際には127MBの容量しか使用されていません。

イメージはレイヤー構造

イメージはいくつもの層が重なって構成されています。

共通するレイヤーがあれば使い回し、ディスクの容量を節約し、ひいては高速化に繋がります。

docker history

以下のコマンドを使用することで、imageレイヤーの差分をたどることができます。

docker history nginx:latest 

イメージがレイヤーの積み重ねであり、その差分を記録していることで、共通部分を使い回すことができます。
それによってコンテナイメージは軽量になっています。

Docker image inspect

以下のコマンドを使用することで、イメージのメタデータを確認することができます。

docker image inspect nginx:mainline

コンテナのIDや、作者はもちろん、

デフォルトで使用するポート環境変数なども確認することができます。

まとめ

下記の操作を行いながら、Dockerが軽量である理由や、
イメージがメタデータと差分のレイヤーであることを確認しました。

  • タグを指定してイメージをDockerHubからダウンロード
  • pull済みのイメージを確認
  • 同一イメージに複数のタグをつけて管理
  • イメージのレイヤーを確認

ちなみに、コンテナを起動してアレコレすると、このイメージにさらに差分が積み重なっていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?