検索
ホームページ運用・保守DockerDocker を使用した階層的再利用のアイデアを 10 分で学べます

この記事では、イメージの階層化、コンテナーの階層化、および 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

を使用して、特定のイメージにどのレイヤーが含まれているかを確認できます<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>

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 サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
KubernetesとDocker:比較分析KubernetesとDocker:比較分析Apr 27, 2025 am 12:05 AM

DockerとKubernetesの主な違いは、Dockerがコンテナ化に使用され、Kubernetesはコンテナオーケストレーションに使用されることです。 1.Dockerは、アプリケーションを開発、テスト、展開し、コンテナを介して分離とリソースの制限を実装するための一貫した環境を提供します。 2。Kubernetesは、コンテナ化されたアプリケーションを管理し、自動化された展開、拡張、管理機能を提供し、負荷分散と自動スケーリングをサポートします。この2つの組み合わせは、アプリケーションの展開と管理の効率を改善できます。

LinuxでDockerの実行:インストールと構成LinuxでDockerの実行:インストールと構成Apr 26, 2025 am 12:12 AM

LinuxにDockerをインストールして構成するには、システムが64ビットとカーネルバージョン3.10以上であることを確認する必要があります。コマンド「Sudoapt-GetUpDate」を使用し、コマンド「Sudoapt-GetUpDate」でインストールし、「Sudoapt-GetUpDate」で検証します。 Dockerは、Linuxカーネルの名前空間とコントロールグループを使用して、コンテナの分離とリソースの制限を実現します。画像は読み取り専用テンプレートであり、コンテナを変更できます。使用法の例には、NGINXサーバーの実行やカスタムDockerFilesを使用した画像の作成が含まれます。一般

なぜDockerを使用するのですか?説明された利点と利点が説明されていますなぜDockerを使用するのですか?説明された利点と利点が説明されていますApr 25, 2025 am 12:05 AM

Dockerを使用する理由は、アプリケーションをパッケージ化、配布、および実行するための効率的でポータブルで一貫した環境を提供するからです。 1)Dockerは、開発者がアプリケーションとその依存関係を軽量のポータブルコンテナにパッケージ化できるようにするコンテナ化されたプラットフォームです。 2)Linuxコンテナテクノロジーとジョイントファイルシステムに基づいて、迅速な起動と効率的な操作を確保しています。 3)Dockerは、マルチステージの構造をサポートし、画像サイズと展開速度を最適化します。 4)Dockerを使用すると、開発と展開プロセスを簡素化し、効率を改善し、環境全体の一貫性を確保できます。

Docker in Action:実際の例とユースケースDocker in Action:実際の例とユースケースApr 24, 2025 am 12:10 AM

実際のプロジェクトのDockerのアプリケーションシナリオには、展開の簡素化、マルチコンテナーアプリケーションの管理、パフォーマンスの最適化が含まれます。 1.Dockerは、dockerfileを使用してnode.jsアプリケーションを展開するなど、アプリケーションの展開を簡素化します。 2。DockerComposeは、マイクロサービスアーキテクチャのWebやデータベースサービスなどのマルチコンテナーアプリケーションを管理しています。 3.パフォーマンス最適化は、マルチステージ構造を使用して画像サイズを縮小し、健康チェックを通じてコン​​テナのステータスを監視します。

Docker vs. Kubernetes:ユースケースとシナリオDocker vs. Kubernetes:ユースケースとシナリオApr 23, 2025 am 12:11 AM

小さなプロジェクトまたは開発環境でDockerを選択し、大規模なプロジェクトまたは生産環境でKubernetesを選択します。 1.ドッカーは、迅速な反復とテストに適しています。2。Kubernetesは、大規模なアプリケーションの管理と拡張に適した強力なコンテナオーケストレーション機能を提供します。

LinuxのDocker:Linuxシステムのコンテナ化LinuxのDocker:Linuxシステムのコンテナ化Apr 22, 2025 am 12:03 AM

Linuxは、豊富なツールとコミュニティサポートを提供するネイティブプラットフォームであるため、LinuxでDockerが重要です。 1. docker:sudoapt-getupdateとsudoapt-getinstalldocker-cedocker-ce-clicotainerd.ioを使用します。 2。コンテナの作成と管理:Dockerrun-D-Namemynginx-P80:80NginxなどのDockerrunコマンドを使用します。 3。DockerFileを書き込み:画像サイズを最適化し、マルチステージ構造を使用します。 4。最適化とデバッグ:DockerLogsとDockerexを使用します

Docker:コンテナ化ツール、Kubernetes:オーケストレーターDocker:コンテナ化ツール、Kubernetes:オーケストレーターApr 21, 2025 am 12:01 AM

Dockerはコンテナ化ツールであり、Kubernetesはコンテナオーケストレーションツールです。 1. Dockerパッケージアプリケーションとその依存関係は、Docker対応環境で実行できるコンテナに依存します。 2。Kubernetesはこれらのコンテナを管理し、自動展開、スケーリング、管理を実装し、アプリケーションを効率的に実行します。

Dockerの目的:アプリケーションの展開を簡素化しますDockerの目的:アプリケーションの展開を簡素化しますApr 20, 2025 am 12:09 AM

Dockerの目的は、アプリケーションの展開を簡素化し、コンテナ化技術を通じてさまざまな環境でアプリケーションが一貫して実行されるようにすることです。 1)Dockerは、アプリケーションと依存関係をコンテナにパッケージ化することにより、環境の違いの問題を解決します。 2)DockerFileを使用して画像を作成して、アプリケーションがどこでも一貫して実行されることを確認します。 3)Dockerの作業原則は画像とコンテナに基づいており、Linuxカーネルの名前空間とコントロールグループを使用して、分離とリソース管理を実現します。 4)基本的な使用法には、DockerHubからの画像の引き込みと実行が含まれます。高度な使用法には、DockerComposeを使用したマルチコンテナーアプリケーションの管理が含まれます。 5)画像構築の故障やコンテナの障害などの一般的なエラーは、ログやネットワーク構成を介してデバッグできます。 6)パフォーマンス最適化構造

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません