Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

方法 1: 設定ファイルを変更する (docker サービスを停止する必要があります)

1. dockerサービスを停止する

systemctl stop docker.service (重要、変更前に docker サービスを停止する必要があります)

2. vim /var/lib/docker/containers/コンテナID/config.v2.json

設定ファイル内のディレクトリの場所を変更し、保存して終了します。

"MountPoints":{"/home":{"Source":"/docker","Destination":"/home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"//docker/","Target":"/home"}}}

3. dockerサービスを起動する

systemctl で docker.service を起動します。

4. Dockerコンテナを起動する

docker start <コンテナ名/ID>

方法2: 既存のコンテナを新しいイメージとして送信し、再実行する

$ docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
 5a3422adeead ubuntu:14.04 "/bin/bash" 約 1 分前 終了しました (0) 約 1 分前 agitated_newton
$ docker commit 5a3422adeead 新しいイメージ名
$ docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 新しいイメージ名 /bin/bash

次に、古いコンテナを停止し、この新しいコンテナを使用します。何らかの理由で新しいコンテナで古い名前を使用する必要がある場合は、古いコンテナを削除した後、docker rename を使用します。

方法3: コンテナをイメージとしてエクスポートし、新しいイメージとしてインポートする

$docker コンテナエクスポート -o ./myimage.docker コンテナID
$docker インポート ./myimage.docker 新しいイメージ名
$docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 新しいイメージ名 /bin/bash

次に、古いコンテナを停止し、この新しいコンテナを使用します。何らかの理由で新しいコンテナで古い名前を使用する必要がある場合は、古いコンテナを削除した後、docker rename を使用します。

追加知識: Dockerの再起動後にデータ損失を防ぐ方法、データボリュームをマウントする方法を教えます

Docker を使用して Web アプリケーションや MySQL データベースをデプロイする場合、コンテナを再起動すると、コンテナ操作中に生成されたログやデータベース データがクリアされることがわかります。では、このデータをどのように保存すればよいのでしょうか。

これには、Docker がホスト ディスク ディレクトリをマウントしてデータを永続的に保存する方法を理解する必要があります。

1. コンテナ作成時にDocker Volumeを実行する

docker runコマンドを使用してDockerコンテナを実行し、イメージubuntu/nginxを使用して、ローカルディレクトリ/tmp/sourceをコンテナディレクトリ/tmp/destinationにマウントします。

docker run -itd --volume /tmp/source:/tmp/destination --name テスト ubuntu/nginx bash

ubuntu/nginx イメージに基づいて Docker コンテナが作成されます。

指定されたコンテナの名前は test であり、これは --name オプションで指定されます。

Docker ボリュームは --volume (-v と省略可能) オプションで指定され、ホストの /tmp/source ディレクトリはコンテナ内の /tmp/destination ディレクトリと 1 対 1 で対応します。

2. Dockerボリュームを表示する

docker inspect コマンドを使用して、Docker コンテナの詳細情報を表示します。

docker examine --format='{{json .Mounts}}' テスト | python -m json.tool[{"Destination": "/tmp/destination","Mode": "","Propagation": "","RW": true,"Source": "/tmp/source","Type": "bind"}]

--format オプションを使用すると、必要なコンテナ情報を選択的に表示できます。 .Mount はコンテナの Docker ボリューム情報です。

python -m json.tool は出力 json 文字列を表示用にフォーマットできます。

ソースはホスト上のディレクトリ、つまり /tmp/source を表します。

宛先はコンテナ内のディレクトリ、つまり /tmp/destination です。

3. ローカルファイルをコンテナに同期できる

ローカルの/tmp/sourceディレクトリに新しいhello.txtファイルを作成します。

/tmp/source/hello.txt をタッチします。/tmp/source/hello.txt

hello.txtファイルはコンテナの/tmp/destination/ディレクトリに表示されます。

docker exec コマンドを使用すると、コンテナ内でコマンドを実行できます。

docker exectest ls /tmp/destination/hello.txt

したがって、ホスト上のディレクトリ /tmp/source/ への変更は、コンテナ ディレクトリ /tmp/destination/ に同期できます。

4. コンテナファイルをホストマシンに同期できる

コンテナの/tmp/destinationディレクトリに新しいworld.txtファイルを作成します。

docker exec テスト touch /tmp/destination/world.txtdocker exec テスト ls /tmp/destination/hello.txtworld.txt

world.txtファイルはホストマシンの/tmp/source/ディレクトリに表示されます。

ls /tmp/source/hello.txt world.txt

コンテナのマウントディレクトリをdockerで変更する3つの方法の上記の概要は、エディターがあなたと共有するすべての内容です。これが参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 既存のDockerコンテナの内容を変更する方法
  • Docker コンテナを他のサーバーに移行する 5 つの方法
  • Dockerイメージ内のファイルを表示する方法
  • docker cp ファイルをコピーしてコンテナに入る

<<:  Ajax リクエストにおけるクロスドメイン問題の原因と解決策

>>:  一般的な XHTML タグの使用方法の紹介

推薦する

ARGB、RGB、RGBAの違いと紹介

ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...

HTML での位置の使用に関する簡単な紹介

昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...

goaccess を使用して nginx ログを分析する詳細な方法

最近、goaccess を使って nginx ログを分析したいのですが、nginx ログの設定形式が...

Vue Element-ui テーブルはツリー構造テーブルを実現します

この記事では、ツリー構造テーブルを実現するためのElement-uiテーブルの具体的なコードを参考ま...

HTML 学習ノート - HTML 構文の詳細な説明 (必読)

1. HTML マークアップ言語とは何ですか? HTML は、Web ページの情報を表すマークアッ...

Vue で Baidu Map を呼び出して経度と緯度を取得する

プロジェクトでは、現在地の緯度経度を取得したり、場所を検索して緯度経度情報を取得したりする必要があり...

vue_drf は SMS 認証コードを実装します

目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...

Dockerディスク容量不足の問題を解決する

Docker が配置されているサーバーをしばらく稼働させたところ、サーバーのディスク ディレクトリの...

MySQL の異常なエラー ERROR: 2002 を解決する方法

最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...

CSSカスケーディングメカニズムについての簡単な説明

CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...

MySQLの指定順序ソートクエリについての簡単な説明

最近、空港や駅でフライト情報を表示するものと似た大型スクリーンディスプレイのプロジェクトに取り組んで...

MySQLクエリステートメント内のユーザー変数のコード分析

前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...

MySQLカーソルの詳細な紹介

目次1. カーソルとは何ですか? 2. カーソルの使い方1. カーソルを宣言する2.カーソルを開く3...

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...

ノードを使用して静的ファイルキャッシュを実装する方法

目次キャッシュキャッシュ位置の分類キャッシュ設定ヘッダーNodeは静的ファイルキャッシュを実装する強...