ドッカーの研究ノート(d)のデータ管理

デフォルトでは、すべてのファイルがコンテナ船の書き込み可能な層に格納されている、これは意味します:

  • 容器がもはや存在している場合、データは永続的ではないではない、別のデータコンテナの必要がある場合は、コンテナからデータを得ることが困難となります。
  • しっかりとコンテナを実行しているホストに接続された書き込み可能な層のコンテナ。別の場所にデータを移動する簡単な方法はありません。
  • ストレージドライバはファイルシステムを管理するために必要な書き込み可能な層コンテナを書きます。Linuxカーネルファイルシステムジョイントを使用して、ストレージドライバ。この追加の抽象化性能低下の使用と比較して、ホスト・ファイル・システム・データ・ボリュームに直接書き込まれます。

ボリュームとバインドマウント:ドッカーコンテナファイルがまだコンテナ停止後に存在する場合でも、ホストファイルに保存することができる2つのオプションがあります。Linuxのドッカー上で動作し、あなたはtmpfsのは、一時的なマウントをマウントすることができます。

どちらにしても、コンテナ内のデータは同じです。これは、ファイルシステム内の単一のファイルやディレクトリのような容器を開示しています。

ローディングボリュームの簡単な方法との違いは、バインドTMPFSをマウントし、ホストドッカー上の位置データを考慮します。

3との間の差

  • ドッカーによって保存されたボリューム(Linux上の/ var / libに/ドッキングウィンドウ/ボリューム/)ホストファイルシステムの管理の一環。非ドッカープロセスは、ファイルシステムのこの部分を変更しないでください。ボリュームはドッカー内のデータを保持するための最良の方法です。

  • バインドマウントは、ホストシステムの任意の場所に格納することができます。彼らは重要なシステムファイルやディレクトリかもしれません。コンテナのドッカーホストまたは非ドッキングウィンドウドッキングウィンドウのプロセスは、いつでも変更することができます。

  • ホストシステムのメモリにtmpfsマウント、ホストシステムのみを格納ファイルシステムを書き込まれることはありません。

ボリューム機能

ボリュームはドッカーコンテナとサービスに永続化データの好ましい方法です。いくつかの実施形態は、ボリュームあってを使用します。

  • 動作複数の容器の間で共有されるデータ。明示的に作成していない場合は、ボリュームがロードされる最初の容器内に作成されます。コンテナが停止または削除されると、ボリュームは依然として存在しています。複数の容器が同じボリューム内に同時にインストールすることができ、読み取ることができる読み取り専用ことができます。あなたが明示的にボリュームを削除する場合にのみ、ボリュームを削除します。

    ドッカーホストは、指定されたディレクトリやファイル構造を保証できない場合。ボリュームを使用すると、ドッカーホストランタイムを分離するための容器を構成するのに役立ちます。

  • 如果要将容器的数据存储在远程主机或云提供程序上,而不是本地存储。

  • 当您需要将数据从一个Docker主机备份,还原或迁移到另一个Docker主机时,卷是更好的选择。您可以使用卷停止容器,然后备份卷的目录(例如/var/lib/docker/volumes/ )。

Bind mounts的特点

  • 将配置文件从主机共享到容器。这就是Docker默认通过/etc/resolv.conf从主机安装到每个容器中来为容器提供DNS解析的方式 。

  • 在Docker主机上的开发环境和容器之间共享源代码或构建工件。例如,您可以将Maven target/ 目录挂载到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问重建的工件。

    如果以这种方式使用Docker进行开发,您的生产Dockerfile会将生产就绪工件直接复制到映像中,而不是依赖于绑定装载。

  • 当Docker主机的文件或目录结构保证与容器所需的绑定安装一致时。

tmpfs

  • tmpfs 不希望数据在主机或容器内持久存在时,最好使用挂载。这可能是出于安全原因,或者在应用程序需要编写大量非持久状态数据时保护容器的性能。

Volumes和Bind mounts需要注意

  • 如果将空卷装入容器中存在文件或目录的目录中,则会将这些文件或目录传播(复制)到卷中。同样,如果启动容器并指定尚不存在的卷,则会为您创建一个空卷。这是预先填充另一个容器所需数据的好方法。

  • 如果将绑定装载或非空卷装入容器中存在某些文件或目录的目录中,则装载会遮盖这些文件或目录,就像将文件保存到/mntLinux主机上然后安装USB驱动器进入/mnt。/mnt在卸载USB驱动器之前,USB驱动器的内容会遮挡内容。隐藏的文件不会被删除或更改,但在安装绑定装载或卷时无法访问。

数据卷(Volumes)

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用

  • 对 数据卷 的修改会立马生效

  • 对 数据卷 的更新,不会影响镜像

  • 数据卷 默认会一直存在,即使容器被删除

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的 数据卷。

创建数据卷

$ docker volume create my-vol

查看所有的 数据卷

 $ docker volume ls
DRIVER              VOLUME NAME
local               my-vol

在主机里使用以下命令可以查看指定 数据卷 的信息

$ docker volume inspect my-vol
[
    {
        "CreatedAt": "2019-05-19T08:22:09Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": null,
        "Scope": "local"
    }
]

启动一个挂载数据卷的容器

在用 docker run 命令的时候,使用 -v和--mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷。

-v或--mount的区别:

如果要指定数据卷的选项,则必须使用--mount。

  • -v或--volume:由三个字段组成,用冒号字符(:)分隔。字段必须按正确的顺序排列,并且每个字段的含义不是很明显。
    • 对于命名卷,第一个字段是卷的名称,并且在给定主机上是唯一的。对于匿名卷,省略第一个字段。
    • 第二个字段是文件或目录在容器中安装的路径。
    • 第三个字段是可选的,是逗号分隔的选项列表,例如ro。这些选项将在下面讨论。
  • --mount:由多个键值对组成,以逗号分隔,每个键 = 组由一个元组组成。该--mount语法比更详细的-v或--volume,但按键的顺序并不显著,并且标志的价值更容易理解。

    • type是挂载类型,可以是bind,volume,或 tmpfs。本主题讨论卷,因此挂载类型始终是volume。
    • source,对于命名卷,这是卷的名称。对于匿名卷,省略此字段。可以指定为source 或src。
    • destination 文件或目录在容器中的路径。可以指定为destination,dst或target。
    • readonly(如果存在)导致绑定装入以只读方式装入容器中。
    • volume-opt 选项可以多次指定,它采用由选项名称及其值组成的键值对。

注意:如果启动的容器不存在挂载卷的路径,Docker会自动创建。

  • -v
$ docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest
  • --mount
$ docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

删除数据卷

删除容器后,Docker数据卷仍然存在。

  • 例如,命名卷:具有来自容器外部的特定源awesome:/bar
  • 匿名卷没有特定的源,因此在删除容器时,可以用--rm指令删除。

删除匿名卷

要自动删除匿名卷,需要使用--rm选项。例如,创建匿名/foo卷。删除容器后,Docker守护进程会删除/foo卷但不会删除awesome卷。

docker run --rm -v /foo -v awesome:/bar busybox top

删除所有未使用的数据卷并释放空间:

docker volume prune

おすすめ

転載: www.cnblogs.com/zuoruining/p/11031287.html