这一集下先从一张图开始

这张图来自于 docker 官网,次要形容了主机和 docker 间的数据沟通的 3 种形式。别离是 bind mountvolumetmpfs mount。这次次要学习前两种形式。让咱们开始吧~

volume (数据卷)

以下内容摘抄自 docker 官网文档

咱们晓得默认状况下,在容器内创立的所有文件都存储在可写容器层上,这意味着:

  • 当容器不再存在时,数据不会长久存在,而且如果另一个过程须要数据,就很难从容器中取出数据。
  • 容器可写层与容器运行的主机严密耦合。您不能轻易地将数据挪动到其余中央。
  • 写入到容器的可写层须要一个存储驱动程序来治理文件系统。存储驱动程序提供应用Linux内核的联结文件系统。与应用间接写入主机文件系统的数据卷相比,这种额定的形象升高了性能。

通过下面的内容通知咱们,不要在容器内容写入数据,而要应用 volume

那么数据卷是怎么存储数据的呢?

docker 默认在主机上会有一个特定的区域 /var/lib/docker/volumes/ (Linux),该区域用来寄存 volume。

实例演示

// 创立一个 volume 名为 my-data  $ docker volume create my-data  my-data    // 创立一个 名为 nginx1 的 nginx 容器并应用 my-data 为 nginx 的主目录  $ docker run -d -p 8080:80 --name nginx1  --mount source=nginx-data,target=/usr/share/nginx/html nginx    814dea34b7dbf2afd724d12ad50254e2a749f0b65684f04c730ac04181857d04    // 查看容器的状态  $ docker container ls --format "table {{.Image}}t{{.ID}}t{{.Status}}t{{.Names}}"  IMAGE                   CONTAINER ID        STATUS              NAMES  nginx                   814dea34b7db        Up 3 minutes        nginx1    // 进入 nginx1 容器  $ docker exec -it nginx1 bash    // 批改 index.html 内容为 hello world  # echo hello world > /usr/share/nginx/html/index.html    // 拜访 http://127.0.0.1:8080 咱们能够看到 hello world 页面    // 删除 nginx1 容器  $ docker rm -f nginx1    // 创立一个 名为 nginx2 的 nginx 容器也应用 my-data 为 nginx 的主目录  $ docker run -d -p 8080:80 --name nginx2  --mount source=nginx-data,target=/usr/share/nginx/html nginx    // 拜访 http://127.0.0.1:8080 咱们也能够看到 hello world 页面(数据共享)  

通过下面的实例咱们晓得了:

  1. volume 和容器是拆散的,删除容器并不会删除 volume
  2. 多个容器能够加载雷同的卷
  3. volume 在任何零碎的容器上都能工作,不便迁徙

数据卷常用命令

  • 查看所有数据卷 bash docker volume ls
  • 创立数据卷 bash docker volume create [卷名称]
  • 查看卷详情 bash docker volume inspect <卷名称>
  • 删除数据卷 bash docker volume rm <卷名称>
  • 删除无主的卷 bash docker volume prune

舒适提醒:-v 和 --mount 的区别 (因为官网倡议新用户应用 --mount,所以本文只记录 --mount 的应用形式)

在查看网上的各种材料的时候发现有人用 -v 参数而有的人又用 --mount 参数,为了确认他们之间的区别我特意查了一下 docker 官网,当初把内容放进去
  • 最后,-v 或--volume 参数用于独立容器,而 --mount 参数用于群服务。 然而,从 Docker 17.06 开始,您也能够将 --mount 用于独立容器。 通常,--mount 更为明确和具体。 他们间接最大的区别是 -v 语法在一个字段中将所有选项组合在一起,而 --mount 语法将它们离开。
  • 新用户应该尝试—mount语法,它比—卷语法更简略。

下面的内容次要讲述的是 local 驱动下的 volume,实际上 volume 还能够应用其余的驱动,这里先记录一下,前面在在持续学习。

bind mount 挂载主机目录

该形式实际上是将主机上的一个目录映射到容器中的一个目录。(应用过虚拟机的敌人应该比拟相熟)

如果将空文件或目录挂载到容器,容器中的该目录又有文件,那么,这些文件将会被复制到主机上的目录中。如果将非空的文件或目录挂载到容器,容器中的该目录也有文件,那么,容器中的文件将会被暗藏。

实例演示

// 在主机上创立一个 my-data 目录  $ mkdir ~/my-data    // 创立一个 名为 nginx3 的 nginx 容器并挂载 my-data 为 nginx 的主目录  $ cd ~  $ docker run -d -p 8080:80 --name nginx3 --mount type=bind,source="$(pwd)"/my-data,target=/usr/share/nginx/html nginx    // 在 my-data 目录中创立 index.html 并写入内容  $ touch my-data/index.html  $ echo hello bind type > my-data/index.html    // 应用浏览器拜访 http://127.0.0.1:8080  能够失常显示 hello bind type    // 查看 nginx3 容器的详情,留神 mounts 局部,很清晰的显示了绑定的关系  $ docker inspect nginx3  ......  "Mounts":[      {          "Type":"bind",          "Source":"/Users/cc/my-data",          "Target":"/usr/share/nginx/html"      }  ]  ......    

tmpfs 形式 (当前学习)

tmpfs,仅存储在主机零碎的内存中,不会写入主机的文件系统。

这一集下先从一张图开始

这张图来自于 docker 官网,次要形容了主机和 docker 间的数据沟通的 3 种形式。别离是 bind mountvolumetmpfs mount。这次次要学习前两种形式。让咱们开始吧~

volume (数据卷)

以下内容摘抄自 docker 官网文档

咱们晓得默认状况下,在容器内创立的所有文件都存储在可写容器层上,这意味着:

  • 当容器不再存在时,数据不会长久存在,而且如果另一个过程须要数据,就很难从容器中取出数据。
  • 容器可写层与容器运行的主机严密耦合。您不能轻易地将数据挪动到其余中央。
  • 写入到容器的可写层须要一个存储驱动程序来治理文件系统。存储驱动程序提供应用Linux内核的联结文件系统。与应用间接写入主机文件系统的数据卷相比,这种额定的形象升高了性能。

通过下面的内容通知咱们,不要在容器内容写入数据,而要应用 volume

那么数据卷是怎么存储数据的呢?

docker 默认在主机上会有一个特定的区域 /var/lib/docker/volumes/ (Linux),该区域用来寄存 volume。

实例演示

// 创立一个 volume 名为 my-data$ docker volume create my-datamy-data// 创立一个 名为 nginx1 的 nginx 容器并应用 my-data 为 nginx 的主目录$ docker run -d -p 8080:80 --name nginx1  --mount source=nginx-data,target=/usr/share/nginx/html nginx814dea34b7dbf2afd724d12ad50254e2a749f0b65684f04c730ac04181857d04// 查看容器的状态$ docker container ls --format "table {{.Image}}t{{.ID}}t{{.Status}}t{{.Names}}"IMAGE                   CONTAINER ID        STATUS              NAMESnginx                   814dea34b7db        Up 3 minutes        nginx1// 进入 nginx1 容器$ docker exec -it nginx1 bash// 批改 index.html 内容为 hello world# echo hello world > /usr/share/nginx/html/index.html// 拜访 http://127.0.0.1:8080 咱们能够看到 hello world 页面// 删除 nginx1 容器$ docker rm -f nginx1// 创立一个 名为 nginx2 的 nginx 容器也应用 my-data 为 nginx 的主目录$ docker run -d -p 8080:80 --name nginx2  --mount source=nginx-data,target=/usr/share/nginx/html nginx// 拜访 http://127.0.0.1:8080 咱们也能够看到 hello world 页面(数据共享)

通过下面的实例咱们晓得了:

  1. volume 和容器是拆散的,删除容器并不会删除 volume
  2. 多个容器能够加载雷同的卷
  3. volume 在任何零碎的容器上都能工作,不便迁徙

数据卷常用命令

  • 查看所有数据卷 bash docker volume ls
  • 创立数据卷 bash docker volume create [卷名称]
  • 查看卷详情 bash docker volume inspect <卷名称>
  • 删除数据卷 bash docker volume rm <卷名称>
  • 删除无主的卷 bash docker volume prune

舒适提醒:-v 和 --mount 的区别 (因为官网倡议新用户应用 --mount,所以本文只记录 --mount 的应用形式)

在查看网上的各种材料的时候发现有人用 -v 参数而有的人又用 --mount 参数,为了确认他们之间的区别我特意查了一下 docker 官网,当初把内容放进去
  • 最后,-v 或–volume 参数用于独立容器,而 --mount 参数用于群服务。 然而,从 Docker 17.06 开始,您也能够将 --mount 用于独立容器。 通常,–mount 更为明确和具体。 他们间接最大的区别是 -v 语法在一个字段中将所有选项组合在一起,而 --mount 语法将它们离开。
  • 新用户应该尝试—mount语法,它比—卷语法更简略。
    • *

下面的内容次要讲述的是 local 驱动下的 volume,实际上 volume 还能够应用其余的驱动,这里先记录一下,前面在在持续学习。

bind mount 挂载主机目录

该形式实际上是将主机上的一个目录映射到容器中的一个目录。(应用过虚拟机的敌人应该比拟相熟)

如果将空文件或目录挂载到容器,容器中的该目录又有文件,那么,这些文件将会被复制到主机上的目录中。如果将非空的文件或目录挂载到容器,容器中的该目录也有文件,那么,容器中的文件将会被暗藏。

实例演示

// 在主机上创立一个 my-data 目录$ mkdir ~/my-data// 创立一个 名为 nginx3 的 nginx 容器并挂载 my-data 为 nginx 的主目录$ cd ~$ docker run -d -p 8080:80 --name nginx3 --mount type=bind,source="$(pwd)"/my-data,target=/usr/share/nginx/html nginx// 在 my-data 目录中创立 index.html 并写入内容$ touch my-data/index.html$ echo hello bind type > my-data/index.html// 应用浏览器拜访 http://127.0.0.1:8080  能够失常显示 hello bind type// 查看 nginx3 容器的详情,留神 mounts 局部,很清晰的显示了绑定的关系$ docker inspect nginx3......"Mounts":[    {        "Type":"bind",        "Source":"/Users/cc/my-data",        "Target":"/usr/share/nginx/html"    }]......

tmpfs 形式 (当前学习)

tmpfs,仅存储在主机零碎的内存中,不会写入主机的文件系统。

帮忙文档

快捷键

目录

题目

文本款式

列表

链接

代码片

表格

注脚

正文

自定义列表

LaTeX 数学公式

插入甘特图

插入UML图

插入Mermaid流程图

插入Flowchart流程图

插入类图

快捷键

Markdown

图标

快捷键

撤销

Ctrl /⌘+Z

重做

Ctrl /⌘+Y

加粗

Ctrl /⌘+B

斜体

Ctrl /⌘+I

题目

Ctrl /⌘+Shift +H

有序列表

Ctrl /⌘+Shift +O

无序列表

Ctrl /⌘+Shift +U

待办列表

Ctrl /⌘+Shift +C

插入代码

Ctrl /⌘+Shift +K

插入链接

Ctrl /⌘+Shift +L

插入图片

Ctrl /⌘+Shift +G

查找

Ctrl /⌘+F

替换

Ctrl /⌘+G

volume (数据卷)

实例演示

数据卷常用命令

舒适提醒:-v 和 --mount 的区别 (因为官网倡议新用户应用 --mount,所以本文只记录 --mount 的应用形式)

bind mount 挂载主机目录

实例演示

tmpfs 形式 (当前学习)

Markdown 2987 字数 117 行数 以后行 1, 当前列 0

HTML 2491 字数 73 段落