Dockerイメージとは?
コンテナの実行に必要なファイル群(プログラム本体/ライブラリ/ミドルウェア/OS/ネットワーク設定等)を格納したディレクトリのことでコンテナ作成時のテンプレートになります。なお、一つのDockerイメージから複数のDockerコンテナを作成することができます。
特徴
- AUFSという特殊なファイルシステムが利用されています。
- イメージ上のデータはレイヤー構造になっていて読み取り専用になっています。
レイヤー構造
Dockerイメージに手を加えるたびにレイヤーという階層が作られます。(例えば、DockerイメージにNgnixをインストールした場合は一つレイヤーが積み重なりますし、設定ファイルを更新した場合とかでも同様です。)
コンテナレイヤー
Dockerイメージから新しくレイヤーを作成した場合は新しくレイヤーの一番上に「コンテナレイヤー」という階層が作られます。コンテナレイヤーに関しては読み書きが可能になります。それを後でDockerイメージとして保存することも可能です。
イメージのサイズは変わらない。
過去のレイヤーで作成したファイルは後のレイヤーで削除をしたとしてもそのまま残り続けます。なのでDockerイメージのサイズは変わらないです。Dockerイメージはできるだけ軽量であることが求められるため無駄なファイルがイメージの中に残らないように作成することが大事です。
Dockerイメージの継承
Dockerイメージは継承して作成することが可能です。(例えば、「CentOSレイヤー」の上に「Rubyレイヤー」、「Railsレイヤー」を載せるというような感じで。)
メリット
ストレージの節約
継承元のレイヤーが同じコンテナがあればコンテナでリソースを共有できるのでストレージの節約になります。(例えば、WebコンテナとDBコンテナがあった場合にOSレイヤーが同じの場合はOSレイヤーのファイルは共有することが可能です。)
二重にDockerイメージを取得する必要がない。
二重に継承元のレイヤーをダウンロードする必要がないので通信量の節約にもなります。
Dockerイメージダウンロード
Dockerイメージをダウンロードする際は下記のようなメッセージが表示されます。
1 2 3 4 5 6 |
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:4fe721ccc2e8dc7362278a29dc660d833570ec2682f4e4194f4ee23e415e1064 Status: Downloaded newer image for hello-world:latest |
Unable to find image 'hello-world:latest' locally
ローカル(自分のPC上)にDockerイメージが存在しないということを示しています。
latest: Pulling from library/hello-world
latestタグからプルしているということになります。
1b930d010525: Pull complete
Dockerイメージの各レイヤーになります。このサンプルでは一行しか表示されていませんが複数行表示されていた場合は複数レイヤーをダウンロードしているという意味になります。一部レイヤー情報をローカルに持っていた場合は足りないレイヤー情報がだけがダウンロードされることになります。
Digest: sha256:4fe721ccc2e8dc7362278a29dc660d833570ec2682f4e4194f4ee23e415e1064
ダウンロードしたイメージのデータを「sha256」でハッシュ化したものでイメージごとに一意になるものです。Dockerイメージの内容が変更された場合はこちらの内容も変わります。
Status: Downloaded newer image for hello-world:latest
Dockerイメージのプルの結果ステータスを表示しています。「Downloaded newer image」であればプルに成功していることになります。
タグの生成
下記コマンドを実行すればDockerイメージからタグを生成することが可能です。
docker image tag 元イメージ名:[タグ] 新イメージ名:[タグ]、省略系は「docker tag」
Dockerイメージの特定バージョンにタグ付を行います。なお、元イメージと新イメージのイメージIDは全く同じになります。
latestタグの注意点
docker pullコマンドでリポジトリからDockerイメージを取得することができますがデフォルトで使用されるタグが「latestタグ」になります。latestタグは最新バージョンのDockerイメージであることが多いですが古いイメージである場合もあります。
docker pullをする場合は明示的なタグを指定してDockerイメージをプルした方が安全かもしれません。
この記事へのコメントはありません。