サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

Docker入門から(第4回:dockerのイメージとcommit操作)

tin
tin
2023-03-01 / 0 コメント / 2 いいね! / 108 読み / 1,579 文字

背景

前回は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する際の画面
image-1677747375572

レイヤーについて
image-1677756617037

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コンテナの実行時に変更を加えることができます。
    image-1677747548121

2. commit操作で新しいイメージを作成

2-1. ubuntuコンテナを起動

docker run -it ubuntu bash
最初のubuntuコンテナは「vim」の機能を搭載していない
image-1677748938998

2-2. 「vim」をダウンロード

apt-get update
apt-get -y install vim

image-1677752105769

2-3. Ctrl+p+qでubuntuコンテナを退出

2-4. vim追加済みのコンテナでイメージを作成

docker commit -m="メモ" -a="クリエーター" コンテナID イメージ名:[タグ名]
image-1677752424778

2-5. 自作のイメージでコンテナを起動、vimが機能するかを確認

docker run -it tin/myubuntu:1.0 bash
image-1677756499970

2
  • 2

コメント欄