Dockerイメージについて(メモ)
Dockerイメージとは
Dockerイメージ
- コンテナ実行に必要なファイルをまとめたファイルシステム
- AUFSなどの特殊なファイルシステムが使用される
AUFSとはストレージドライバーでHDなどにストレージのデータを書き込むためのソフトウェアのこと。
Dockerで使用できるストレージドライバーの一種。
レイヤーという階層構造で特殊なファイルシステム(らしい) - イメージ上のデータはレイヤーで構成され読み取り専用
Dcokerイメージのファイルシステム
文章だけではわかりづらいが、Dockerイメージは階層構造でデータが管理されている。
各層のことをレイヤーと呼ぶ。
基本的にコマンドを実行するたびに積み上げていく仕組みとなっている。
レイヤーは全て読み取り専用となる。
Dockerイメージを基にコンテナを起動すると、新たに読み書き可能なコンテナレイヤーという層が作られる。
このコンテナレイヤーでファイルの追加削除やパッケージの追加や削除を行い、それをもとにイメージを作成することも可能。
ただし、過去のレイヤーで削除したファイルなど、追加時点のレイヤーには残ってしまうため、イメージ全体のサイズは変わらない。
Dockerのメリットである、軽量ですぐに環境を立ち上げられるからかけ離れてしまう。
複数のイメージで継承関係を作れる
CentOSのベースイメージを持ったイメージにRubyのイメージを継承させ、CentOSとRubyのレイヤーを一つのイメージにまとめられる。
さらに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