背景
前回はdockerの常用コマンドをまとめました。それで、dockerにつき、大体の感覚、あとは簡単な操作はできますね。
今回はすこし深い話をします。dockerイメージからdokcerの仕組みまで、commitで自分なりのイメージを作り、自作のイメージでコンテナを起動したりします。
1. Dokcerのイメージ(image)について
1-1. イメージ(image)はなんですか
-
Dockerのイメージは、コンテナを実行するための静的なテンプレートです。
イメージには、必要なすべてのファイル、設定、および依存関係が含まれています。 -
イメージは、Docker Hubやプライベートリポジトリなどのレジストリに保存され、
必要に応じてユーザーに配布されます。
Dockerコンテナは、実行時にイメージから生まれます。
コンテナは、環境を完全に分離して、ホストシステムに影響を与えずに、
アプリケーションを実行することができます。 -
また、イメージは、スナップショットのように考えることができます。
開発者は、環境やアプリケーションの変更を行う前に、
イメージを作成しておくことで、アプリケーションの状態を保存できます。
このようにして、イメージは、アプリケーションの再現性を確保し、開発、テスト、
本番環境での展開を簡単にすることができます。
1-2. レイヤー(layer)はなんですか
-
Dockerイメージのレイヤーとは、Dockerイメージを構成するファイルシステムの差分層のことを指します。
-
Dockerイメージは、1つまたは複数のレイヤーで構成されています。
ベースイメージ(たとえば、Ubuntu)が最初のレイヤーであり、
その上に、Dockerfileで指定された各命令に対応するレイヤーが追加されます。
各レイヤーには、前のレイヤーと比較して変更されたファイルシステムの内容が含まれます。これにより、Dockerイメージは、前のレイヤーの内容を再利用しながら、効率的に構築されます。 -
レイヤーのメリットは、Dockerイメージのサイズとビルド時間を削減できることです。
同じベースイメージから複数のイメージを構築する場合、ベースイメージを再利用することで、レイヤーを共有できるため、ビルド時間やストレージスペースを節約できます。
また、イメージの更新時にも、変更があるレイヤーのみを変更し、
他のレイヤーは再利用できるため、更新が高速かつ効率的に行えます。
イメージをpullする際の画面
レイヤーについて
1-3. UnionFSはなんですか
-
DockerのUnionFS(Union File System)は、複数のファイルシステムを結合して
1つのファイルシステムとして見せる仕組みです。
Dockerでは、UnionFSを使用して、イメージのレイヤーを組み合わせて、
最終的なファイルシステムを構築します。 -
具体的には、DockerはAufs(Another UnionFS)やOverlayFSなどのUnionFSの実装を利用して、Dockerイメージを構築しています。
これらのUnionFSの実装は、Dockerのレイヤーを組み合わせ、最終的なイメージのファイルシステムを作成します。 -
また、UnionFSは、変更された部分だけを保持することができるため、
Dockerイメージの更新や変更が高速かつ効率的に行えます。
これにより、Dockerコンテナの起動時間を短縮し、
パフォーマンスを向上させることができます。 -
ヒント:Dockerイメージの仕組みがレイヤー(layer)構造だからこと、UnionFSを利用するのではないと個人感想です。
1-4. イメージレイヤーとコンテナレイヤーはなんですか
- イメージレイヤーはDockerイメージの構成要素であり、
- コンテナレイヤーはDockerコンテナの実行時に使用されるファイルシステムのレイヤーです。
- イメージレイヤーは不変である一方、コンテナレイヤーは可変であり、Dockerコンテナの実行時に変更を加えることができます。
2. commit操作で新しいイメージを作成
2-1. ubuntuコンテナを起動
docker run -it ubuntu bash
最初のubuntuコンテナは「vim」の機能を搭載していない
2-2. 「vim」をダウンロード
apt-get update
apt-get -y install vim
2-3. Ctrl+p+qでubuntuコンテナを退出
2-4. vim追加済みのコンテナでイメージを作成
docker commit -m="メモ" -a="クリエーター" コンテナID イメージ名:[タグ名]
2-5. 自作のイメージでコンテナを起動、vimが機能するかを確認
docker run -it tin/myubuntu:1.0 bash
コメント欄