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

推薦する

Vue の computed と watch の違いを分析する

目次1. 計算入門1.1、getとsetの使い方1.2. 計算された属性キャッシュ2. 時計の紹介3...

MYSQLでリモートアクセス権限を有効にする方法

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...

フレックスレイアウトは左のテキストオーバーフローを実現し、右のテキストの適応を省略します

テキストの長さに応じて、左側のテキストの幅を自動調整できる状況を実現したい。1行が表示できない場合、...

Web デザイン: Web ミュージックの実装テクニック

<br />Web ページに音楽を挿入する場合、サフィックスに応じて異なるコードを記述す...

...

MySQL のデッドロック チェックとデッドロック除去の例の詳細な説明

1. クエリプロセスプロセスリストを表示2. 対応するプロセスを照会し、IDを強制終了します。検証(...

Avue でカスタム検索バーを実装し、検索イベントをクリアする実践

目次1. 検索バーの内容をカスタマイズする2. 検索ボタンをカスタマイズする検索バーをカスタマイズし...

MySQL の if 関数の正しい使い方の詳細な説明

今日私が書こうとしている内容では、プログラムは 7 時間近く実行され、データベースに 1,000 万...

JavaScript を使用してカルーセル効果を実装する

この記事では、カルーセルマップの特殊効果を実現するためのJavaScriptの具体的なコードを参考ま...

MySQLのSQL文はインデックスを使用しません

インデックス集約を使用しない MySQL クエリご存知のとおり、インデックスを追加することはクエリ速...

JavaScript ES 新機能ブロックスコープ

目次1. ブロックスコープとは何ですか? 2. ブロックスコープが必要なのはなぜですか? 3. 関数...

CSS はモバイル デバイスで水平スクロール ナビゲーション バーを実装します (PC デバイスにも適用可能)

関数の起源最近、水平スクロール バーを必要とする H5 に取り組んでいました。いくつかのドキュメント...

MySQL の異なるテーブル間でフィールドをコピーする

場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...