目次
Docker がストレージを整理する方法
1. イメージの階層化
2. コンテナの階層化
3. ディスク上でコンテナーが占めるスペース
4.2复制让容器更有效率
ホームページ 運用・保守 Docker Docker を使用した階層的再利用のアイデアを 10 分で学べます

Docker を使用した階層的再利用のアイデアを 10 分で学べます

Jan 19, 2022 pm 05:37 PM
docker

この記事では、イメージの階層化、コンテナーの階層化、および Docker でコンテナーが占有するディスク容量に関連する問題について説明します。

Docker を使用した階層的再利用のアイデアを 10 分で学べます

Docker がストレージを整理する方法

Dokcer は、ストレージ コンテンツを整理するときに階層再利用のアイデアを巧みに適用します。したがって、このアイデアを学ぶためのケースとしてこれを使用できます。

1. イメージの階層化

Docker イメージは構築プロセス中に多くのレイヤーに分割され、各レイヤーは読み取り専用になります。次の例で説明してみましょう:

# syntax=docker/dockerfile:1
FROM ubuntu:18.04
LABEL org.opencontainers.image.authors="org@example.com"
COPY . /app
RUN make /app
RUN rm -r $HOME/.cache
CMD python /app/app.py
ログイン後にコピー

この Dockerfile には、ファイル システムを変更して新しいレイヤーを作成する 4 つの命令があります。

  • FROM コマンドは、ubuntu:18.04 イメージから基本レイヤーを作成します。
  • LABELこのコマンドは画像のメタデータを変更するだけであり、新しいレイヤーは作成しません。
  • COPY コマンドは、このビルドが実行される現在のディレクトリの内容をイメージに追加し、変更を記録するための新しいレイヤーを作成します。
  • 最初の RUN 命令はプログラムを構築し、結果を画像に出力し、変更を記録するための新しいレイヤーを作成します。
  • 2 番目の RUN コマンドは、キャッシュ ディレクトリを削除し、変更を記録するための新しいレイヤーを作成します。
  • CMD ディレクティブは、コンテナー内で実行される命令を定義します。これは画像のメタデータを変更するだけであり、新しいレイヤーは作成しません。

ここでは、各レイヤーは前のレイヤーとの違いのみを記録します。コンテナを作成すると、コンテナ レイヤーとも呼ばれる書き込み可能なレイヤーが作成されます。実行中のコンテナの内容に対する変更は、このレイヤーに記録されます。次の図は、この関係を示しています:

2. コンテナの階層化

コンテナとイメージの主な違いは、トップレベルです。書き込みレイヤーは異なります。コンテナへのすべての書き込み操作はこのレイヤーに記録されます。コンテナが削除されると、書き込み可能なレイヤーも削除されますが、イメージは保持されます。

: 複数のコンテナーで同じデータを共有する場合は、Docker ボリュームを使用できます。

各コンテナには独自の書き込み可能なレイヤーがあり、そこにすべての変換が保存されるため、複数のコンテナが同じイメージを共有できます。次の図は、この関係を示しています:

Note: ここには別の詳細があります。複数のミラー (2 つのミラーなど) が同じレイヤーを共有する場合があります。ビルドまたはプル時に同じレイヤーがローカルで見つかった場合、再度ビルドまたはプルされることはありません。そのため、イメージサイズを計算する際には、dockerimages コマンドで表示されるサイズを単純に合計することはできず、実際の値よりも大きくなる可能性があります。

3. ディスク上でコンテナーが占めるスペース

docker ps -s コマンドを使用すると、コンテナーが占めるスペースを確認できます。実行中のコンテナ (部分値)。 2 つの列で表されるさまざまな内容:

  • size: コンテナの書き込み可能レイヤーが占めるディスク サイズ
  • virtual size: コンテナの書き込み可能レイヤーと読み取り専用のレイヤーのサイズが含まれます。画像 。

コンテナがディスク領域を占有するその他の方法:

  • コンテナによって生成されるログ ファイル。
  • ボリュームおよびバインド マウントを使用してマウントされたコンテンツ。
  • コンテナ設定ファイル
  • メモリ内の内容(スワップが有効な場合)
  • チェックポイント(この機能を使用する場合)
## 4.コピーオンライト (CoW) 戦略

Docker のストレージ ドライバーはすべてこの戦略を使用します。

CoW 戦略では、最大限の効率でファイルを共有およびコピーできます。ファイルがイメージの下位レイヤーに存在する場合、その上位レイヤー (書き込み可能なレイヤーを含む) はコンテンツを読み取る必要があり、ファイルを直接使用できます。変更する必要がある場合、ファイルはこのレイヤーにコピーされて変更されます。これにより、IO と後続の各層のサイズが最小限に抑えられます。

4.1 共有するとイメージが小さくなります

docker pull

を使用してイメージをプルする場合、またはローカルで作成できないイメージを使用する場合コンテナーの場合、イメージはローカルの Dockers ストレージ領域に階層的に保存されます。 Linux では通常、/var/lib/docker です。

/var/lib/docker/

ディレクトリに移動して、各レイヤーのイメージを取得したことを確認できます。たとえば、overlay2 ストレージ ドライバーを使用します。

非常に多くのレイヤーがあるため、

docker image Inspection

を使用して、特定のイメージにどのレイヤーが含まれているかを確認できます<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">docker image inspect --format &quot;{{json .RootFS.Layers}}&quot; redis docker image inspect --format &quot;{{json .RootFS.Layers}}&quot; mysql:5.7</pre><div class="contentsignin">ログイン後にコピー</div></div>

Docker を使用した階層的再利用のアイデアを 10 分で学べます

##上記のレビューを通じて、redis と mysql5.7 が同じレイヤーを使用していることがわかります。同じレイヤーを共有することで、ストレージ イメージのスペースが大幅に節約され、プルも向上します。ミラーリングの速度。

我们可以通过 docker image history命令来查看镜像分层情况,以redis为例

docker history redis
ログイン後にコピー

注意 :

  • 有些步骤的大小为0,是因为他们只改变了元数据,并不会产生新层,也不会占用额外的空间(除元数据本身)。所以上述redis镜像中包含了5层。

  • <missing></missing>步骤,这些步骤可能是以下情况中的一种

    • 在另一个系统上构建的
    • 从Docker Hub中提取的
    • 使用BuildKit作为构建器构建的。

4.2复制让容器更有效率

当我们启动一个容器的时候,会添加一个可写层在镜像之上,用于存储所有的变化。当对已有文件进行修改的时候采用CoW策略。首先会到各层寻找到该文件,然后复制该文件到可写层,然后进行修改并存储。

这么做能够让我们最大限度地减少I/O操作。

但是,很明显的是当一个容器中的应用需要进行频繁的写操作,那么会造成可写层越来越庞大,此时我们可以通过Volume来帮助我们分担压力。

容器的元数据和日志是单独存放的,一般是存放在 /var/lib/docker/containers中,我们可以使用 du -sh /var/lib/docker/containers/*来查看各个容器占用多少。(容器ID其实就是文件夹名称的前12位)。

推荐学习:《docker视频教程

以上がDocker を使用した階層的再利用のアイデアを 10 分で学べますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dockerでミラーを作成する方法 Dockerでミラーを作成する方法 Apr 15, 2025 am 11:27 AM

Docker画像を作成する手順:ビルド命令を含むDockerFileを書きます。 Docker Buildコマンドを使用して、ターミナルで画像を作成します。画像にタグを付け、Dockerタグコマンドを使用して名前とタグを割り当てます。

Dockerの画像を更新する方法 Dockerの画像を更新する方法 Apr 15, 2025 pm 12:03 PM

Docker画像を更新する手順は次のとおりです。最新の画像タグ新しい画像をプルする新しい画像は、特定のタグのために古い画像を削除します(オプション)コンテナを再起動します(必要に応じて)

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

Dockerのファイルを外部にコピーする方法 Dockerのファイルを外部にコピーする方法 Apr 15, 2025 pm 12:12 PM

Dockerの外部ホストにファイルをコピーする方法:Docker CPコマンドを使用:Docker CP [Options]&lt; Container Path&gt; &lt;ホストパス&gt;。データボリュームの使用:ホストにディレクトリを作成し、-vパラメーターを使用してコンテナを作成するときにディレクトリをコンテナにマウントして、双方向ファイルの同期を実現します。

Dockerバージョンを読む方法 Dockerバージョンを読む方法 Apr 15, 2025 am 11:51 AM

Dockerバージョンを取得するには、次の手順を実行できます。Dockerコマンド「Docker -version」を実行して、クライアントバージョンとサーバーバージョンを表示します。 MacまたはWindowsの場合は、DockerデスクトップGUIのバージョンタブまたはDockerデスクトップメニューのバージョン情報を表示することもできます。

Docker画像を保存する方法 Docker画像を保存する方法 Apr 15, 2025 am 11:54 AM

Dockerに画像を保存するには、Docker Commitコマンドを使用して、指定されたコンテナの現在の状態、Syntax:Docker Commit [Options]コンテナID画像名を含む新しい画像を作成できます。画像をリポジトリに保存するには、Docker Pushコマンド、Syntax:Docker Push Image Name [:Tag]を使用できます。保存された画像をインポートするには、Docker Pullコマンド、Syntax:Docker Pull Image Name [:Tag]を使用できます。

Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Dockerによってコンテナを出る方法 Dockerによってコンテナを出る方法 Apr 15, 2025 pm 12:15 PM

Dockerコンテナを終了する4つの方法:コンテナ端子でCtrl Dを使用するコンテナターミナルに出口コマンドを入力しますDocker stop&lt; container_name&gt;コマンドを使用するDocker Kill&lt; container_name&gt;ホストターミナルのコマンド(フォース出口)

See all articles