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 タグの使用方法の紹介

推薦する

ソフトウェア テスト - MySQL (VI: データベース関数)

1.MySQL関数1. 数学関数PI() # 円周率 (pi) の値を返します。デフォルトの小数点...

JavaScript のプライベート クラス フィールドと TypeScript のプライベート修飾子の詳細な説明

目次JavaScript のプライベート クラス フィールドとプライバシーの必要性JavaScrip...

CentOS での mysql5.7 の詳細なインストールと設定のチュートリアル

インストールユーザーにインストール権限があることを確認してくださいルートスイッチなしsuルート(su...

Vue-cliに基づくコードセットは複数のプロジェクトをサポートします

目次アプリケーションシナリオアイデアプロジェクト構造全体的なプロジェクト構造webpack パッケー...

TypeScript名前空間の説明

目次1. 定義と使用1.1 定義1.2 使用2. 複数のファイルに分割する3. エイリアス序文: T...

JS で配列の重複排除を実装する 7 つの方法

目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....

CentOS7 ファイアウォールとポート関連コマンドの紹介

目次1. ファイアウォールの現在の状態を確認する2. ファイアウォールサービスを開始する3. ファイ...

Webフロントエンドスキル概要(個人の実務経験)

1. 今日、ページを作っているときに、矢印を中央に配置する効果に遭遇しました。クリック領域を大きくし...

docker compose デプロイメントにおけるマスタースレーブレプリケーションの実装

目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...

vmware14Pro で Ubuntu システム インターフェイスが小さすぎる問題の解決方法の詳細な説明

1. 動作環境vmware14proウブントゥ 16.04LTS 2. 問題の説明vmware14P...

Docker コンテナの uid と gid の詳細な理解

デフォルトでは、コンテナ内のプロセスは root ユーザー権限で実行され、この root ユーザーは...

...

JavaScript 配列メソッド - 体系的な概要と詳細な説明

目次一般的な配列メソッド配列要素の追加と削除配列ヘッダーの操作配列の末尾を操作する任意の場所に追加ま...

Bootstrap 3.0 学習ノートのページレイアウト

今回はレイアウトを中心に学習しますが、これは基本的なHTMLタグのほとんどにも存在するため、比較的簡...