Dockerイメージについて(メモ)

Dockerイメージとは

Dockerイメージ

  • コンテナ実行に必要なファイルをまとめたファイルシステム
  • AUFSなどの特殊なファイルシステムが使用される
    AUFSとはストレージドライバーでHDなどにストレージのデータを書き込むためのソフトウェアのこと。
    Dockerで使用できるストレージドライバーの一種。
    レイヤーという階層構造で特殊なファイルシステム(らしい)
  • イメージ上のデータはレイヤーで構成され読み取り専用

Dcokerイメージのファイルシステム

文章だけではわかりづらいが、Dockerイメージは階層構造でデータが管理されている。
各層のことをレイヤーと呼ぶ。
基本的にコマンドを実行するたびに積み上げていく仕組みとなっている。
レイヤーは全て読み取り専用となる。

Dockerイメージを基にコンテナを起動すると、新たに読み書き可能なコンテナレイヤーという層が作られる。
このコンテナレイヤーでファイルの追加削除やパッケージの追加や削除を行い、それをもとにイメージを作成することも可能。
ただし、過去のレイヤーで削除したファイルなど、追加時点のレイヤーには残ってしまうため、イメージ全体のサイズは変わらない。
Dockerのメリットである、軽量ですぐに環境を立ち上げられるからかけ離れてしまう。

複数のイメージで継承関係を作れる

CentOSのベースイメージを持ったイメージにRubyのイメージを継承させ、CentOSRubyのレイヤーを一つのイメージにまとめられる。
さらにRailsのイメージを継承させて、CentOS,Ruby,Railsのまとまったイメージを作れる。
同じDockerイメージを継承するメリットとしては、
CentOS,Rubyがまとまったイメージ
CentOS,MySQLがまとまったイメージ
①と②ともにCentOSは同じなので、CentOSは同じデータを利用してくれる。
同じレイヤーを使用している場合、同じレイヤーのデータを参照してくれる。
そのためレイヤーがダブることなく、イメージサイズが小さくなりやすい。

ローカル上にダウンロードしているDockerイメージ一覧表示

$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB

左から順に
REPOSITORY・・・どのリポジトリからダウンロードしたかものを表しています。
TAG・・・どのタグをダウンロードしたのか確認できる
IMAGE ID・・・イメージを識別するためのID
CREATED・・・いつ作成したか
SIZE・・・サイズ

イメージにタグ付を剃るコマンド

ローカル上に存在するイメージのみ可能。
まずエイリアスとするパターン

$ docker tag docker/whalesay test_whalesay
  • tag・・・タグ付けするサブコマンド
  • docker/whalesay・・・元となるイメージ名
  • test_whalesay・・・新しいイメージ名

実行後

$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
test_whalesay     latest    6b362a9f73eb   6 years ago    247MB // 増えた
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB


タグ付は上記のコマンドに:TAGとすればできる。

$ docker tag docker/whalesay test_whalesay:ver1

$ doker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB
test_whalesay     latest    6b362a9f73eb   6 years ago    247MB
test_whalesay     ver1      6b362a9f73eb   6 years ago    247MB // ここ

IMAGE IDが同じなので、ショートカット的な状態。

イメージの詳細情報を表示するコマンド

$ docker inspect test_whalesay
  • inspect・・・イメージの詳細情報を表示するサブコマンド
  • test_whalesay・・・対象のイメージ名かイメージIDでも可能
    たくさんの情報が出てくるので割愛

ローカルのイメージを削除する方法

$ docker rmi docker/whalesay
  • rmi・・・イメージの削除をするサブコマンド
  • test_whalesay・・・対象のイメージ名かイメージIDでも可能
$ docker rmi -f docker/whalesay
  • -f・・・矯正削除する場合に-fをつける
    すでに削除したいイメージが含まれた状態で作成されたコンテナが存在する場合に、使用する。
    またはコンテナを削除してからイメージを削除する方法もある。
$ docker rmi docker/whalesay
Untagged: docker/whalesay:latest
Untagged: docker/whalesay@sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b

$ docker images
REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
hello-world      latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick   latest    2ffdacbd6685   4 months ago   864MB
ruby             2.7       89699f4d76cf   4 months ago   864MB
test_whalesay    latest    6b362a9f73eb   6 years ago    247MB
test_whalesay    ver1      6b362a9f73eb   6 years ago    247MB

本家のwhalesayがなくなりました。

イメージを取得(pull)するコマンド

$ docker pull docker/whalesay
  • pull・・・イメージの削除をするサブコマンド
  • docker/whalesay・・・対象のイメージ名
    Docker Hub上にあるイメージを取得してくるコマンド
    タグを指定しない場合、latestタグを取得してくるが、必ずしも最新バージョンがlatestであるということではない点を注意する必要がある。
$ docker pull docker/whalesay
Using default tag: latest
latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
00bf65475aba: Already exists
c57b6bcc83e3: Already exists
8978f6879e2f: Already exists
8eed3712d2cf: Already exists
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
docker.io/docker/whalesay:latest

$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB // 増えてる
test_whalesay     latest    6b362a9f73eb   6 years ago    247MB
test_whalesay     ver1      6b362a9f73eb   6 years ago    247MB