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

推薦する

スーパーバイザーウォッチドッグの使い方を3分で学ぶ

ソフトウェアとハ​​ードウェア環境centos7.6.1810 64ビット cat /etc/red...

Docker+Jenkinsを使用して自動的にビルドおよびデプロイする

この記事では、Docker+Jenkins の自動ビルドデプロイメントを紹介し、皆さんと共有します。...

mysql zipファイルのインストールチュートリアル

この記事では、参考までにMySQL zipファイルをインストールする具体的な方法を紹介します。具体的...

CSS 位置固定左と右の二重配置実装コード

CSS 位置position 属性は、要素の配置タイプを指定します。位置プロパティには 5 つの値が...

Vue3 スロットの使用状況の概要

目次1. Vスロットの紹介2. 匿名スロット3. 名前付きスロット4. スコープ付きスロット5. 動...

HTML リスト タグ dl、ul、ol の使用例

コードをコピーコードは次のとおりです。 <!--リストタグ: <dl>: 階層リス...

Web コンポーネントの内部イベント コールバックと問題点の分析

目次前面に書かれたWC とは何でしょうか?現在の欠陥1. コンポーネント内部イベントのコールバック2...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

9999px に別れを告げる新しい CSS 画像置換テクニック (背景表示と画面外へのテキストの移動)

-9999 ピクセルの画像置換技術は、ここ 10 年近く人気があります。テキスト要素を画像に置き換え...

VMware12.0 インストール Ubuntu14.04 LTS チュートリアル

私は、デスクトップ バージョンとサーバー バージョンの両方で、仮想マシンにさまざまなイメージを何度も...

MYSQL メタデータ ロック (MDL ロック) MDL ロックの問題分析

1. はじめにMYSQL の MDL ロックは常に頭痛の種でした。ロックについて話すとき、通常は I...

Nginx リバース プロキシはポート 80 のリクエストを 8080 に転送します

まず、一連の概念を理解しましょう。nginx リバース プロキシとは何でしょうか?リバース プロキシ...

iframeフレームはIEブラウザで白い背景を透明に設定します

最近、プロジェクトを進める過程で、ページの階層構造を描画するために iframe を頻繁に使用する必...

Vue で Axios 非同期リクエスト API を使用する方法

目次基本的なHTTPリクエストの設定async/await を使用した Axios Axios によ...

MySQL データベースのバックアップをスケジュールするいくつかの方法 (包括的)

目次1. データをバックアップするためのmysqldumpコマンド2. 一般的なmysqldump操...