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

推薦する

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...

MySQL実践スキル: 2つのテーブルに異なるデータがあるかどうかを比較する方法の分析

この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を...

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

Linux ベースの MySQL マスター スレーブ構成の全プロセスを記録する

mysql マスタースレーブ構成1. 準備ホスト: 192.168.244.128スレーブ: 192...

Nginx で Brotli 圧縮アルゴリズムを有効にする方法の例

Brotli は、Zopfli よりも 20 ~ 26% 高い圧縮率を実現できる新しいデータ形式です...

Dockerボリュームコンテナ間のデータ共有の実装

ボリュームとは何ですか?ボリュームは英語で容量を意味し、Docker ではデータ ボリューム、つまり...

Windows に異なる (2 つの) バージョンの MySQL データベースをインストールする詳細なチュートリアル

1. 原因: SQL ファイルをインポートする必要があるのですが、インポートできません。この文を実行...

MySQL 8.0.13 で日付を 0000-00-00 00:00:00 に設定すると発生する問題を解決する

データベース操作を学び始めたばかりです。今日、データを保存していたところ、エラーが発生していることに...

重複リクエストを削除するAxiosのソリューションについての簡単な説明

目次1. 重複したリクエストをキャンセルする2. すべてのリクエストをクリーンアップするこのソリュー...

HTML H タイトルタグの使用

H タグ、特に h1 タグの使用は常に議論の的となっている問題であり、私たちが研究する価値のある問題...

入力テキストボックスの長さをコンテンツに応じて変更する方法

初め:コードをコピーコードは次のとおりです。 <input type="text&q...

Nodejs プラグインと使用方法の概要

このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 12.19....

CentOs でノード バージョンを手動でアップグレードする方法

1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...

W3C 検証に合格するにはどうすればいいですか?

W3C では、さまざまなタグの規定を設定するだけでなく、Web ページの作成者が実際に W3C 規...