自 2013 年出现以来,Docker 改变了我们打包程序的方式。它允许开发人员构建具有最小依赖性的尖端软件,并使部署比以往更容易。 如果你是一个有抱负的软件工程师,想要掌握 docker 平台,你需要对各种 docker volume 命令有很好的理解。 卷是 Docker 用来提供持久数据存储的一种机制。 它们在软件开发和部署方面提供了显着的好处。 我们今天花时间教你 Docker 中数据卷的基本构建块。
基本 Docker 卷命令示例
本指南将向您介绍开发人员在商业和开源项目中实现持久数据存储的当前方法。 完成本指南后,您将能够创建自己的数据卷并从 docker 容器轻松访问它们。 如果您是绝对的初学者,我们建议您在使用卷之前查看我们的基本 docker 命令指南。
1. 创建 Docker 卷
在 Docker 中创建数据卷非常容易。 您将需要使用 docker 守护程序的卷创建命令来执行此操作。 快速浏览以下内容 example 看看这是如何工作的。
$ docker volume create testVolume
此命令创建数据卷名称 测试卷 可以由特定容器使用或在容器集群之间共享。 您现在可以将此卷挂载到容器内的某个位置。 完成后,从主机存储或访问容器数据将非常容易。
2. 显示可用卷
开发环境具有大量数据量是很常见的。 因此,确定您正在使用的特定卷至关重要。 幸运的是,使用 docker 守护程序的 volume ls 子命令很容易列出所有当前声明的数据卷。
– –
$ docker volume ls
通过运行上述命令,您将获得主机中存在的所有 docker 卷的列表。 它打印出数据卷的名称以及相应的卷驱动程序。 数据卷存储在主机文件系统的特定部分,即 /var/lib/docker/volumes/ 在 Linux 中。
3. 检查 Docker 卷
docker 守护程序的卷检查命令为我们提供了有关特定卷的基本信息。 它显示卷驱动程序、安装点、范围和标签等信息。 下面的命令使用实用的方法演示了这一点 example.
$ docker volume inspect testVolume
结果数据表明我们的 测试卷 安装在该位置 /var/lib/docker/volumes/testVolume/_data 我们的主机。 它还显示此信息的创建日期以及任何指定的选项。 它使开发人员更容易对数据量进行故障排除。
4. 删除特定卷
如果您积累了未使用的数据量,最好将其删除。 您可以通过这种方式释放主机环境中的存储空间。 以下 example 说明如何使用其名称属性删除单个卷。
$ docker volume rm testVolume
因此,您可以使用 volume rm 子命令删除特定数据卷,后跟卷名。 它将在您的 Linux 终端模拟器中返回已删除卷的名称作为确认。
5. 删除多个卷
删除多个数据卷也非常简单。 只需依次传递要删除的卷的名称。 下面的命令显示了这一点。
$ docker volume rm testVolume newVolume otherVolume
此命令将删除三个指定的数据卷。 请注意,我们还没有创建 新卷 和 其他卷. 它们在这里仅用于演示目的。 因此,请确保您的数据卷在删除之前首先存在。
6. 删除所有卷
将容器从开发机器移到生产环境后,摆脱数据量总是一个好主意。 幸运的是,docker 守护进程允许开发人员使用单个命令删除所有可用的 docker 卷,如下图所示。
$ docker volume prune
此外,这个 docker volume 命令是优雅的,这意味着它不会删除现有容器正在使用的任何卷。 因此,它使用起来非常安全,并有助于释放开发环境中急需的空间。
7. 创建带有数据卷的容器
到目前为止,我们只展示了一些基本的卷操作。 但是,在大多数实际场景中,您需要将数据卷挂载到 docker 容器中。 以下 docker 命令向您展示了如何创建 docker 容器并将数据卷挂载到该容器。
$ docker run -d -it --name test-container -v "testVolume":/tmp ubuntu:xenial
$ docker run -d -it --name test-container --volume "testVolume":/tmp ubuntu:xenial
此命令将使用 ubuntu:xenial 映像创建一个名为 test-container 的容器,并将我们的数据卷挂载到 /tmp 这个容器的位置。 您可以通过运行以下命令并检查输出的“Mount”部分来找到更多信息。
$ docker inspect test-container
8. 将数据卷挂载到容器
这 -山 Docker 中的选项可用于将现有数据卷寻址到容器文件系统的特定部分。 虽然结果与上述命令完全相似,但对许多 Linux 开发人员来说更直观。
$ docker run -d -it --name test-container --mount source=testVolume,target=/tmp ubuntu:xenial
这 -山 选项一组逗号分隔的元组。 这些是表示数据卷属性的
9. 在 Docker 中创建绑定挂载
绑定挂载是一种从 Docker 早期就已经可用的持久性机制。 与 docker 卷相比,它们提供的功能有些有限,但在某些特定情况下更合适。 与卷相反,绑定挂载依赖于底层主机文件系统。
$ docker run -d -it --name test-container --mount type=bind,source=$(pwd),target=/tmp ubuntu:xenial
上面的命令创建了一个绑定挂载,它将 Linux 文件系统的当前工作目录映射到 /tmp 容器的位置。 type=bind 元组表示这是一个绑定挂载,而不是一个卷。
10. 预填充数据卷
有时开发人员可能需要在创建 docker 容器时预先填充他们的数据卷。 但是,此技术仅适用于容器的目标目的地在创建卷之前保存数据的情况。
$ docker run -d --name=nginxContainer -v nginxVol:/usr/share/nginx/html nginx:latest
此命令首先创建卷 nginxVol 并使用 /usr/share/nginx/html 容器文件系统的位置。 现在,共享 nginxVol 卷的所有其他容器都可以访问这些数据。 您也可以使用挂载语法,如下所示。
$ docker run -d --name=nginxContainer --mount source=nginxVol,destination=/usr/share/nginx/html nginx:latest
11. 使用只读卷
默认情况下,所有容器都对其各自的数据卷具有读写访问权限。 但是,并非所有容器都需要将数据写入卷。 通常简单地读取数据就足够了。 在这种情况下,您可以为容器分配只读访问权限。 检查 docker volume 命令以了解其工作原理。
$ docker run -d --name=nginxContainer -v nginxVol:/usr/share/nginx/html:ro nginx:latest
因此,只需添加 ‘:ro‘ 目的地后的字段将禁止 nginxContainer 向 nginxVol 写入数据。 如果您使用 –mount 选项创建卷,则需要使用 ‘readonly’ 选项。 仔细注意语法上的差异。
$ docker run -d --name=nginxContainer --mount source=nginxVol,destination=/usr/share/nginx/html,readonly nginx:latest
12. 使用驱动程序创建卷
卷驱动程序是 Docker 使用的一种灵活机制,用于提供对远程挂载、数据加密和其他功能的访问。 以下命令向用户展示了如何使用特定的卷驱动程序创建 docker 容器。
$ docker volume create --driver vieux/sshfs -o [email protected]:/home/session -o password=testPassword sshVolume
此命令使用创建 docker 数据卷 vieux/sshfs 驱动程序. 该驱动程序允许开发人员使用 SSHFS 技术附加远程目录。
13. 运行使用驱动程序创建卷的容器
您可以使用以下命令创建和启动使用卷驱动程序创建其数据卷的容器。 这 example 建立在上述一个之上。
$ docker run -d --name sshfsContainer --volume-driver vieux/sshfs --mount src=sshVolume,target=/tmp,[email protected]:/home/session,volume-opt=password=testPassword nginx:latest
volume-opt 元组传递选项。 并非每个用例都需要它。 但是,如果您指定 volume-opt,则必须使用 -山 标志而不是 -v 或者 -体积。
14. 创建使用 NFS 卷的服务
NFS 或网络文件系统是一个分布式文件共享系统,它允许我们使用远程文件系统,就好像它们是本地文件系统的一部分一样。 以下命令显示如何创建使用 NFS 卷的服务。
$ docker service create -d --name nfs-service --mount 'type=volume,source=nfsVolume,target=/tmp,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/var/docker-nfs,volume-opt=o=addr=10.0.0.10' nginx:latest
此命令假定我们的 NGS 服务器在 10.0.0.10 上运行,并且它暴露了 /var/docker-nfs 目录。 它还使用 NFSv3。 因此,在将其与 NFSv4 一起使用之前,您需要进行一些调整。
15. 备份容器
卷为开发人员提供了一种灵活的方式来备份重要的容器数据。 出于说明目的,我们将首先创建一个名为 test-container 的新容器。
$ docker run -v /data --name test-container ubuntu:xenial /bin/bash
因此,测试容器有一个名为 /数据。 现在,我们将启动另一个容器并挂载 /数据 来自测试容器的体积。 然后,我们将文件系统的本地目录挂载为 /备份 然后存储内容 /数据 到 /备份 目录作为backup.tar。
$ docker run --rm --volumes-from test-container -v $(pwd):/backup ubuntu:xenial tar cvf /backup/backup.tar /data
这 –volumes-来自 option 表示我们实际上正在将 test-container 的数据量挂载到我们的新容器中。
16. 恢复容器备份
从备份文件中恢复容器也很容易。 您可以将数据还原到同一容器或特定容器。 我们将向您展示如何恢复之前创建的 backup.tar 文件的内容 example 到这里的另一个容器。
$ docker run -v /data --name test-container2 ubuntu /bin/bash
此命令创建另一个新容器,其中包含 /数据 体积。 现在我们将在这个新数据卷中提取 backup.tar 文件的内容。
$ docker run --rm --volumes-from test-container2 -v $(pwd):/backup ubuntu bash -c "cd /data && tar xvf /backup/backup.tar --strip 1"
您可以轻松地使用这些简单而灵活的 docker volume 命令自动执行备份和恢复。
17. 删除匿名卷
之前,我们已经看到了如何删除一个普通的命名卷。 但是,Docker 还有另一种类型的数据卷,称为匿名卷。 快速查看以下命令,了解命名卷和匿名卷之间的删除操作有何不同。
$ docker run --rm -v /anon -v whats-in-a-name:/tmp busybox top
上述命令将创建一个名为 /匿名 和一个名为的卷 什么名字. 现在,Docker 将在退出时自动删除此容器。 但是,它只会删除 /匿名 卷,而不是 whats-in-a-name 卷。 您需要使用 docker volume 命令 rm 将其删除。
18. 指定挂载传播
挂载传播表示原始挂载与其副本之间的控制流。 默认情况下,绑定挂载和卷都使用 私有 环境。 这避免了原始挂载与其副本之间的任何传播。 您可以使用绑定挂载的绑定传播元组覆盖此设置。
$ docker run -d -it --name test-container --mount type=bind,source="$(pwd)"/test,target=/tmp --mount type=bind,source="$(pwd)"/test,target=/temp,readonly,bind-propagation=shared nginx:latest
该命令挂载 /测试 目录两次进入容器。 此外,任何新增的 /tmp 安装将反映在 /温度 山。 但是,您不能在使用卷时覆盖传播设置。 它仅在 Linux 主机上使用绑定挂载时有效。
19. 显示音量指令手册
您可以使用以下命令轻松查看音量命令的基本用法。
$ man docker volume
但是,它没有提供深入的解释。 因此,我们建议您查阅官方 docker 文档 卷 和 绑定坐骑.
20. 显示子命令的帮助页面
使用以下命令显示可用于 docker 卷的主要选项。
$ docker volume --help
您还可以使用以下语法显示有关特定选项的更多信息。
$ docker volume COMMAND --help $ docker volume ls --help
结束的想法
Docker 卷为现代应用程序提供了急需的工具。 它们允许开发人员通过消除存储问题来创建强大、尖端的应用程序和服务。 此外,docker volume 命令还可以轻松创建和维护容器数据的备份。 我们制定了这份经过深思熟虑的指南,以帮助您更轻松地掌握数据量。 我们强烈建议您先从基本命令开始,然后逐渐转向复杂的现实场景。 希望我们为您提供了您在本指南中寻找的信息。 如果您有任何问题,请不要忘记给我们留言。