Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)

Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)

システムの初期のパーティション分割により、オペレーティング システム内の対応する / パーティションは大きくなりすぎず、/var ディレクトリは個別にパーティション分割されません。 Docker サービスを実行すると、長期間使用すると、元々大きかったパーティションがだんだんと不足してきます。この問題にもっとうまく対処するにはどうすればよいでしょうか?

1. ソフトリンクを使用する

オペレーティング システムでは、デフォルトでは Docker コンテナの保存場所は /var/lib/docker ディレクトリの下にあることがわかっています。次のコマンドで具体的な場所を確認できます。

#デフォルトの保存場所$ sudo docker info | grep "Docker Root Dir"

デフォルトのストレージ容量が不足している問題を解決する最も直接的かつ効果的な方法は、このディレクトリに新しいパーティションをマウントすることです。ただし、元のシステム スペースが変更されていない場合は、ソフト リンク方式を採用してイメージとコンテナーのストレージ パスを変更し、同じ目的を達成します。

# Dockerサービスを停止します $ systemctl restart docker  
# Dockerサービスを停止します $ service docker stop

次に、/var/lib/docker ディレクトリ全体を、スペースをあまり占有しない宛先パスに移動します。この時点で Docker を起動すると、ストレージ ディレクトリは /var/lib/docker ディレクトリのままですが、実際にはデータ ディスク /data/docker に保存されていることがわかります。

# 元のコンテンツを移動する $ mv /var/lib/docker /data/docker  
# リンク $ ln -sf /data/docker /var/lib/docker

2. コンテナの起動パラメータを指定する

設定ファイルで、コンテナの起動パラメータ --graph=/var/lib/docker を指定して、イメージとコンテナのストレージ パスを指定します。 Docker の構成ファイルでは、バックグラウンド プロセスのパラメータのほとんどを設定できますが、その保存場所はオペレーティング システムごとに異なります。 Ubuntu での場所は /etc/default/docker ファイルで、CentOS での場所は /etc/sysconfig/docker ファイルです。

# CentOS6  
# Ubuntu はデフォルトで selinux メカニズムを有効にするため OPTIONS=--graph="/data/docker" --selinux-enabled -H fd://  
# CentOS7  
# docker.service ファイルを変更し、-g パラメータを使用して保存場所を指定します $ vi /usr/lib/systemd/system/docker.service  
ExecStart=/usr/bin/dockerd --graph /新しいパス/docker 
#ウブントゥ  
# Ubuntu はデフォルトで selinux メカニズムを有効にしないため OPTIONS=--graph="/data/docker" -H fd://

再起動後、Docker パスは /data/docker に変更されます。

# 設定ファイルを再読み込みします $ sudo systemctl daemon-reload  
# docker サービスを再起動します $ sudo systemctl restart docker.service

Docker バージョンが 1.12 以上の場合は、daemon.json ファイルを変更したり、新しいファイルを作成したりできます。変更は Docker サービスを再起動せずにすぐに有効になります。

# 設定ファイルを変更する $ vim /etc/docker/daemon.json  
{  
    「レジストリミラー」:  
        ["http://7e61f7f9.m.daocloud.io"],  
    "グラフ": "/新しいパス/docker"  
}

3. システムの下に設定ファイルを作成する

/etc/systemd/system/docker.service.d ディレクトリにドロップイン ファイル docker.conf を作成します。デフォルトでは、docker.service.d フォルダーは存在しないため、最初に作成する必要があります。 Drop-In ファイルを作成する理由は、Docker サービスが docker.conf ファイルに記載されている特定のパラメータを使用し、/lib/systemd/system/docker.service ファイル内のデフォルト サービスによって使用されるパラメータを上書きするためです。

# 新しい保存場所を定義する $ sudo vi /etc/systemd/system/docker.service.d/docker.conf  
[サービス]  
ExecStart=/usr/bin/dockerd --graph="/data/docker" --storage-driver=devicemapper

保存して vim エディターを終了します。/data/docker は新しいストレージの場所で、devicemapper は現在 Docker で使用されているストレージ ドライバーです。ストレージ ドライバーが異なる場合は、最初の手順で確認して書き留めた値を入力します。これで、サービス デーモンをリロードして Docker サービスを開始できます。これにより、新しいイメージとコンテナーが保存される場所が変更されます。すべてが正常に実行されたことを確認するには、docker info コマンドを実行して Docker ルート ディレクトリを確認します。

# 設定ファイルを再読み込みします $ sudo systemctl daemon-reload  
# dockerサービスを再起動します $ sudo systemctl start docker

Docker イメージのデフォルトの保存場所を変更する方法についての記事はこれで終わりです。Docker イメージのデフォルトの保存場所の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Docker の保存場所を変更する コンテナイメージのサイズ制限を変更する操作
  • Docker のデフォルトイメージとコンテナの保存場所を変更する方法
  • Dockerでイメージ情報を表示する方法

<<:  MySQL で高性能なインデックスを作成するための完全な手順

>>:  JavaScript スコープチェーンの基本原理のグラフィカルな説明

推薦する

Raspberry Pi 4b ubuntu19 サーバーへの docker-ce のインストール手順

Raspberry Pi モデルは 4b、1G RAM です。システムはubuntu19.10サーバ...

Docker を使用してイメージをローカルにパッケージ化してデプロイする方法

初めてDockerを使用してイメージをローカルにパッケージ化してデプロイするまず、私のラップトップシ...

Vue の一般的な問題と解決策の概要 (推奨)

Vue に限定されず、他の種類の SPA プロジェクトにも当てはまる問題がいくつかあります。 1....

Linuxカーネルの浮動小数点演算のサポートに関する簡単な説明

現在、ほとんどの CPU は浮動小数点ユニット (FPU) をサポートしています。FPU は、プロセ...

JavaScript の基本演算子

目次1. オペレーター要約する1. オペレーター演算子は、代入、比較、算術演算などの機能を実装するた...

MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析

導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...

MySQLのnull値に関する小さな問題

今日、null 値をテストしていたところ、小さな問題が見つかりました。ここに記録しました。以前にも遭...

Docker で Kong API Gateway をインストールして使用する詳細なチュートリアル

1 はじめにKong は単純な製品ではありません。この記事で言及されている Kong は主に Kon...

コンパイル/サーバーなしでブラウザにCommonJSモジュールを実装する

目次導入1. one-click.jsとは2. パッケージングツールはどのように機能しますか? 3....

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

forループ内のvarの問題の解決

序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変...

JavaScript インスタンス オブジェクトでプロトタイプ メソッドをオーバーライドする方法の詳細

目次JavaScriptでは、通常、次のコードのようにクラスを簡単に定義できます。 var サンプル...

MySQL テーブルを返すとインデックスが無効になるケースの説明

導入MySQL InnoDB エンジンがレコードをクエリし、インデックス カバレッジを使用できない場...

CSSファイルをインポートする3つの方法の詳細な説明

CSS を導入する方法には、インライン スタイル、内部スタイル シート、外部スタイル シートの 3 ...

レスポンシブフレームワークのテーブルヘッダーの自動改行問題に対する簡単な解決策

最近、Bootstrap を使って Web サイトを開発しています。表を処理していたところ、PC で...