序文 実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共有する必要があり、必然的にコンテナ データ管理操作が必要になります。 方法1: Docker cpコマンド docker cp: コンテナとホスト間でデータをコピーするために使用されます。 構文 # コンテナ内のファイルをホストにコピーする docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # ホストファイルをコンテナにコピーする docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH オプションの説明: -L : ソースとターゲット間のリンクを維持する 操作例: ホストからコンテナへ ホストするコンテナ 注意:この方法は管理にも使えますが、データは統合されず、基本的には利用されません。あくまでも理解のためだけに使われます。 方法2: Dockerデータボリューム 1. ボリュームとは何か Docker Volume を理解するには、まず Docker のファイル システムがどのように機能するかを知る必要があります。 Docker イメージは複数のファイル システム (読み取り専用レイヤー) で構成されます。コンテナを起動すると、Docker はイメージ レイヤーをロードし、その上に読み取り/書き込みレイヤーを追加します。実行中のコンテナが既存のファイルを変更すると、そのファイルは読み取り/書き込みレイヤーの下の読み取り専用レイヤーから読み取り/書き込みレイヤーにコピーされます。読み取り専用バージョンのファイルは引き続き存在しますが、読み取り/書き込みレイヤーのファイルのコピーによって隠されています。 Docker コンテナを削除してイメージで再起動すると、以前の変更は失われます。 Docker では、読み取り専用レイヤーとその上の読み取り/書き込みレイヤーの組み合わせは、Union FIle System と呼ばれます。 データを保存(永続化)し、コンテナ間でデータを共有するために、Docker はボリュームの概念を提案しました。簡単に言えば、ボリュームとは、デフォルトのユニオン ファイル システムをバイパスし、通常のファイルまたはディレクトリとしてホスト マシン上に存在するディレクトリまたはファイルです。 2. データ量の特徴 • データボリュームはコンテナ間で共有および再利用できます • データ量の変更はすぐに有効になります • データボリュームの更新はイメージに影響を与えません • デフォルトでは、コンテナが削除されてもデータボリュームは保持されます 3. データ量関連の操作
データボリュームの作成 使用方法: docker volume create [OPTIONS] [VOLUME] ボリュームを作成する オプション: -d, --driver string ボリューム ドライバー名を指定します (デフォルトは "local") --label list ボリュームのメタデータを設定する -o, --opt map ドライバー固有のオプションを設定する (デフォルト map[]) すべてのデータボリュームを表示 使用方法: docker volume ls [オプション] ボリュームの一覧 別名: ls、リスト オプション: -f, --filter フィルター フィルター値を指定します(例:'dangling=true') --format string Goテンプレートを使用してボリュームをきれいに印刷する -q, --quiet ボリューム名のみ表示 1 つまたは複数のボリュームの詳細を表示する 使用方法: docker volume inspect [OPTIONS] VOLUME [VOLUME...] 1つまたは複数のボリュームの詳細情報を表示する オプション: -f, --format string 指定されたGoテンプレートを使用して出力をフォーマットします 単一のデータボリュームを削除する 使用方法: docker volume rm [OPTIONS] VOLUME [VOLUME...] 1 つ以上のボリュームを削除します。コンテナーによって使用されているボリュームは削除できません。 別名: rm、削除 オプション: -f, --force 1つ以上のボリュームを強制的に削除する アイドルデータボリュームをすべて削除 使用方法: docker volume prune [オプション] 未使用のローカルボリュームをすべて削除する オプション: --filter フィルター フィルター値を指定します (例: 'label=<label>') -f, --force 確認を求めない 操作例: 4. データ使用量 データ ボリュームの使用は、Linux でディレクトリまたはファイルをマウントするのと似ています。 ユーザーは、docker run の --volume/-v または --mount オプションを使用してデータ ボリュームを持つコンテナーを作成できますが、2 つのパラメーターを同時に使用することはできません。 一般的に、--mount はより明示的で詳細です。最大の違いは、-v 構文ではすべてのオプションが 1 つのフィールドにまとめられるのに対し、--mount 構文ではオプションが分離されることです。初心者の場合は、わかりやすいので --mount を使用することをお勧めします。 使用方法: docker run [オプション] イメージ [コマンド] [引数...] 新しいコンテナでコマンドを実行する オプション: --volume list ボリュームをバインドマウントする --volume-driver string コンテナのオプションのボリュームドライバ --volumes-from list 指定されたコンテナからボリュームをマウントします --mount mount コンテナにファイルシステムマウントをアタッチする 4.1 --ボリューム使用状況の詳細 パラメータ --volume (または短縮形 -v) はバインドマウントのみ作成できます。
4.1.1 データボリューム名によるマウント docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [コマンド] [引数...] 例: データボリューム my_vol をコンテナの /data/docker/volume/my_vol ディレクトリにマウントします。 docker run -itd --name=vol1_ubuntu -v my_vol:/data/docker/volume/my_vol ubuntu /bin/bash 注: データ ボリューム my_vol が存在する場合は、直接マウントされます。存在しない場合は、Docker によってデータ ボリュームが自動的に作成され、マウントされます。 4.1.2 ホストファイルディレクトリの絶対パスに従ってマウントする docker run -it -v 絶対ホストディレクトリ:コンテナディレクトリ イメージ [コマンド] [引数...] 例: ホストファイルディレクトリ /opt/common/docker/volumes/my_vol2 をコンテナの /data/docker/volume/my_vol ディレクトリにマウントします。 docker run -itd --name=vol2_ubuntu -v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol ubuntu /bin/bash 注意: ホスト マシンのファイル ディレクトリは絶対パスである必要があります。 4.1.3 ホストファイルの絶対パスに従ってマウントする docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [コマンド] [引数...] 例: ホストファイル ~/.bash_history をコンテナの /.bash_history にマウントします。 docker run -itd --name=vol3_ubuntu -v ~/.bash_history:/.bash_history ubuntu /bin/bash 4.1.4 匿名ボリュームのマウント -v パラメータでホスト関連のボリューム情報を追加しない場合、Docker はマウント用に匿名ボリュームを作成します。 docker run -itd -v コンテナディレクトリ イメージ [コマンド] [引数...] 例: 匿名ボリュームをコンテナの/data/docker/volume/my_volディレクトリにマウントします。 docker run -itd --name=vol4_ubuntu -v /data/docker/volume/my_vol ubuntu /bin/bash 4.1.5 -v の包括的な操作例は次のとおりです。 docker run -itd --name=vol_ubuntu \ -v my_vol:/data/docker/volume/my_vol1:ro \ -v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol2:rw \ -v /opt/common/docker/volumes/my_vol3.txt:/data/docker/volume/my_vol3.txt \ -v /data/docker/volume/my_vol4 \ Ubuntu /bin/bash で 4.2 --mount の使用法の詳細 --mount: カンマで区切られた複数の <key>=<value> キーと値のペアで構成されます。キーの順序は任意です。
--mount オプションの場合、Docker は現在、ホストからコンテナにマウントするための 3 種類のデータ ボリューム (volume、bind、tmpfs) を提供しています。 3 つの方法の概略図を以下に示します。 4.2.1 名前付きマウント 通常のデータ ボリューム (このタイプがデフォルト)。これは Docker によって管理されるホスト ファイル システムの一部であり、デフォルトでは /var/lib/docker/volumes ディレクトリに配置されます。
コード例: docker service create --mount 'type=volume,src=<ボリューム名>,dst=<コンテナパス>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"' --name myservice <イメージ> 4.2.2 バインドマウント データ ボリューム、ファイル、またはディレクトリをマウントにバインドします。これにより、ホスト システム上の任意の場所に保存できるようになります。
*注: Dockerfile は移植と共有を目的としているため、この使用法は Dockerfile ではサポートされていません。ただし、オペレーティング システムによってパスの形式が異なるため、現在はサポートされていません。 コード例: docker run -d -it --name devtest --mount type=bind,source="$(pwd)"/target,target=/app --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave nginx:latest 4.2.2 tmpfsマウント 一時データ ボリュームはホスト システムのメモリにマウントされ保存されますが、ホストのファイル システムには書き込まれません。
注意: この機能は、Linux 上で Docker を実行している場合にのみ使用できます。 コード例: docker run -d -it --name tmptest --mount type=tmpfs,destination=/app,tmpfs-size=1024,tmpfs-mode=1770 nginx:latest 4.3 -v と --mount の違い (1) --mount はクラスター サービスのデータ ボリュームの作成をサポートしますが、-v はサポートしません。 (2)ファイルまたはディレクトリをマウントします。マウント前に存在しない場合は、-v docker によって自動的に作成されますが、--mount では作成されません(エラーが報告されます)。 4.4 補足事項 (1) (--mount は基本的に --volume のオプション属性を含みます) 公式の推奨は --mount メソッドを使用することです。元のテキストは次のとおりです。 (2)公式文書リンク: 詳しくはこちら https://docs.docker.com/engine/reference/commandline/service_create/ 方法3: Dockerデータボリュームコンテナ データ ボリューム コンテナーもコンテナーですが、その目的は、他のコンテナーがマウントするためのデータ ボリュームを提供することです。ユーザーが複数のコンテナー間で継続的に更新されるデータを共有する必要がある場合、最も簡単な方法はデータ ボリューム コンテナーを使用することです。 1. データボリュームコンテナの基本的な使用方法 1.1 データボリュームコンテナの作成 データ ボリューム コンテナー dbdata を作成し、その中にデータ ボリュームを作成して、/dbdata ディレクトリにマウントします。 docker run -it -v /dbdata --name db_data ubuntu 1.2 他のコンテナのマウント 他のコンテナで --volumes-from を使用して、dbdata コンテナのデータボリュームをマウントします。 docker run -it --volumes-from db_data --name db1 ubuntu docker run -it --volumes-from db_data --name db2 ubuntu db1とdb2はdb_dataを通じてデータを共有します 2. データボリュームコンテナを使用してデータボリュームをバックアップ、復元、移行する データ ボリュームは、データのバックアップ、復元、移行に使用できます。 2.1 バックアップ まず、--volumes-from フラグを使用して、dbdata コンテナ ボリュームをマウントし、ローカル ホストの現在の /backup ディレクトリをコンテナにマウントするコンテナを作成します。コマンドは次のとおりです。 sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata コンテナが起動したら、tar コマンドを使用して dbdata ボリュームをローカルの /backup/backup.tar にバックアップします。 2.2 回復 コンテナにデータを復元する場合は、まずデータ ボリュームを持つコンテナ dbdata2 を作成します。 sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash 次に、別のコンテナを作成し、dbdata2 コンテナをマウントし、untar を使用してバックアップ ファイルをマウントされたコンテナ ボリュームに解凍します。 sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar 免責事項:このブログ記事の内容は、完全に個人的な理解に基づいています。異論がある場合は、コメントしてください。 これで、Docker コンテナとホスト間のデータ相互作用に関するこの記事は終了です。Docker コンテナとホスト間のデータ相互作用の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
Linux に Node.js をインストールする方法は 2 つあります。1 つは簡単で、解凍して使...
/****************** * Linux カーネルの時間管理 ***********...
目次序文コアコードコードのファイル表示部分序文この記事では主に、Vue プロジェクトでの添付ファイル...
仮想マシンは使用中であるか、接続できません次のようなエラーが報告された場合解決まずこのページにアクセ...
イメージをプルし、コンテナを作成してコンテナを実行するだけです。 docker run -d --r...
参考までに、Winでmysql5.7をインストールします。具体的な内容は次のとおりです。 @Auth...
Tomcatログの関係一枚の写真は千の言葉に値する! localhost.{yyyy-MM-dd}....
Java 言語には多くのバージョンがあります。一般的に使用されている Java 8 に加えて、一部の...
1. <select style="width:195px" name=&...
グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...
目次デザインコンポーネント通信ライフサイクルイベント処理品格とスタイルクラススタイル条件付きレンダリ...
1. CentOS 7 と CentOS 8 のネットワーク構成の違い: VMware Workst...
例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...
プロジェクトディレクトリを作成する php ディレクトリをコピーする次のプロジェクト構造を作成します...
コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ bo...