「ジオメトリはかっこいい」はホットリストに載っているとは言えませんが、Dockerを私から学ばなかったのはコンテナボリュームだと言いました


一つ、それはなんですか?

背景

  • Dockerは、アプリケーションと実行環境をパッケージ化してコンテナー操作を形成します。操作にはコンテナーを伴うことができますが、データ要件は永続的であることが望まれます。
  • コンテナ間でデータを共有できることが望まれる

Dockerコンテナによって生成されたデータがdockercommitを介して新しいイメージを生成せず、データがイメージの一部として保存される場合、コンテナが削除されると、データは自然に失われます。データを保存するためにDockerでは、それを使用します。

Redisのrdbファイルとaofファイル、または構成センター、またはk8sのデータボリュームに少し似ています

第二に、用途は何ですか?

  • コンテナの永続性
  • 継承+コンテナ間の共有データ

ボリュームは、1つ以上のコンテナーに存在し、Dockerによってコンテナーにマウントされるディレクトリまたはファイルですが、Union File Systemに属していないため、Union File Systemをバイパスして、永続的なストレージまたは共有のためのいくつかの機能を提供できます。データの:

ボリュームの設計目的はデータの永続性であり、コンテナーのライフサイクルから完全に独立しているため、コンテナーが削除されたときにDockerはマウントされたデータボリュームを削除しません。

特点:

  1. コンテナ間でデータを共有または再利用するためのデータボリューム
  2. 音量の変更は直接有効になります
  3. データ量の変更は、ミラーリングされた更新には含まれません
  4. データボリュームのライフサイクルは、コンテナがデータを使用しなくなるまで続きます

3.データ量

3.1直接コマンドの追加

前の章「[Dockerガイド・Ⓓ³] Dockerイメージの詳細な分析」では、独自のイメージissa / myubuntuを作成する方法について説明したので、今回はこれからデータ量の演習を開始します。

ここに画像の説明を挿入

3.1.1データボリュームのマウント

注文: docker run -it -v /宿主机绝对路径目录:/容器内目录:[权限] 镜像名

[許可]:ro / rw(読み取り専用/読み取り/書き込み)
コンテナ内のパスにroとrwを追加して、読み取りと書き込みのアクセス許可を変更します
ro readonly#読み取り専用
rw readwrite#読み取りと書き込み
デフォルトのrw、roの場合、このパスはホストのみが操作でき、コンテナー内では操作できません

  1. 新しいコマンド:dockder run -it -v /tmp:/tmp/test issa/myubuntu:1.14 bash
  2. host / tmpディレクトリで、新しいコマンドを作成します。touch hello.txt
  3. コンテナ内のテストディレクトリでhello.txtファイルが同期的に更新されているかどうかを確認します
  4. コンテナの現在のディレクトリに新しいコマンドを作成しますtail -f hello.txt
  5. host / tmpディレクトリで、新しいコマンドを作成します。echo i love u CSDN 步尔斯特 >> hello.txt、コンテナに出力があるかどうかを確認します

ここに画像の説明を挿入
ここに画像の説明を挿入

3.1.2データボリュームが正常にマウントされているかどうかを確認します

docker inspect 容器ID

ここに画像の説明を挿入

3.1.3コンテナとホスト間のデータ共有

3.1.4コンテナが停止して終了した後、ホストが変更された後にデータが同期されるかどうか

3.1.5コマンド(権限付き)

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

3.2 DockerFile add

  1. ルートディレクトリに新しいmydockerフォルダを作成し、次のように入力します。

  2. DockerfileでVOLUMEコマンドを使用して、1つ以上のデータボリュームをイメージに追加できます
    。VOLUME["/ dataVolumeContainer"、 "/ dataVolumeContainer2"、 "/ dataVolumeContainer3"]
    说明:
    移植性と共有に関する考慮事項については、-v host directory:containerを使用してください。ディレクトリメソッドをDockerfileに直接実装することはできません。
    ホストディレクトリは特定のホストに依存しているため、そのような特定のディレクトリがすべてのホストに存在するという保証はありません。

  3. ファイルビルド

    # volume test 
    FROM issa/ubuntu:1.14 
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] 
    CMD echo "finished,--------success!" 
    CMD /bin/bash 
    
  4. ビルド後にイメージを生成して
    、新しいイメージを取得しますissa / ubuntu:1.14

  5. コンテナを実行する

  6. 上記の手順により、コンテナ内のボリュームディレクトリアドレスはすでにわかっています

  7. ホストはデフォルトアドレスに対応します

3.3マウントする3つの方法

所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxxx/_data

3.3.1マウントするパスを指定します

-v /主机路径:容器内路径
これは上記で使用した方法です

3.3.2匿名マウント

-v 容器内路径

3.3.3名前付きマウント

-v 卷名:容器内路径

3.4備考

DockerがホストディレクトリをマウントしますDockerアクセス​​が表示され、ディレクトリを開くことができません。:アクセスが拒否されました解決策:マウントディレクトリの後にもう1つのパラメータを
追加します--privileged=true

3.5関連コマンド

  1. すべてのボリュームを表示
    docker volume ls
  2. ボリュームを表示する
    docker volume inspect 卷名

5.4データボリュームコンテナ

5.4.1はじめに

名前付きコンテナはデータボリュームをマウントし、他のコンテナはこれをマウントすることでデータ共有を実現し(親コンテナ)、データボリュームをマウントするコンテナをデータボリュームコンテナと呼びます。

上記の手順で作成されたイメージはテンプレートとして使用され、コンテナーdc01 / dc02/dc03を実行します

すでにコンテナボリュームがあります
/dataVolumeContainer1
/ dataVolumeContainer2

5.4.2コンテナ間の転送共有(--volumes-from)

  1. 最初に親コンテナdc01を起動して、dataVolumeContainer2
    にコンテンツを追加します
  2. dc01から継承されたdc02/dc03
    --volumes-from
    docker run -it --name dc02 --volumes-from dc01 issa / ubuntu:1.14
    dc02/dc03はそれぞれdataVolumeContainer2にコンテンツを追加しました
  3. dc01に戻ると、02/03によって追加されたすべてのものを共有できることがわかります。
  4. dc02が変更された後にdc03にアクセスできるかどうか、dc01を削除します
  5. dc02を削除した後、dc03にアクセスできますか?
  6. さらに一歩
  7. dc03を継承する新しいdc04を作成してから、dc03を削除します
  8. 結論:コンテナー間の構成情報の転送、データボリュームのライフサイクルは、コンテナーがそれを使用しなくなるまで続きます

おすすめ

転載: blog.csdn.net/CSDN_SAVIOR/article/details/124427057