Volume:即数据卷。

  • Docker Volume命令能让容器从宿主主机中读取文件,或从容器中持久化数据到宿主主机内,让容器与容器产生的数据分离开来,一个容器可以挂载多个不同的目录。
  • Volume的生命周期是独立于容器的生命周期之外的,即使容器删除了,Volume(数据卷)也会被保留下来,Docker也不会因为这个Volume(数据卷)没有被容器使用而回收。
  • 在容器中,添加或修改这个文件夹里的文件也不会影响容器的联合文件系统。

1、Volume命令说明

通过docker volume --help可以查看Volume命令的详细说明,如下:

[root@192 ~]# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
create Create a volume # 创建一个数据卷
inspect # 打印一个或多个数据卷的详细信息
ls List volumes # 列出所有数据卷
prune Remove all unused local volumes # 删除所有未使用的数据卷
rm Remove one or more volumes # 删除一个或多个数据卷

提示:

Run 'docker volume COMMAND --help' for more information on a command.

执行docker volume COMMAND --help可以查看具体命令的详细说明。

2、Volume命令的使用

(1)创建数据卷

命令:docker volume create 自定义名称

[root@192 ~]# docker volume create myVolume
myVolume
[root@192 ~]#

(2)查看本地数据卷列表

命令:docker volume ls

[root@192 ~]# docker volume ls
DRIVER VOLUME NAME
# 下面三个volume是之前练习时所创建的数据卷挂载,提示这样的volume叫匿名挂载
local 0feb6247c783f1b3620b9dff44ace0c4f4071bc7470b55472f87701c916866ad
local 1d729d58cebf058fa9b14022ddd5211d1690fe6c9084e5c0576bb52743c170c1
local 45ae2157b3cd4ea4b04f2308cbb8562f46d56e9cb19a7aedb6391d35c44ac9b9
# 这个是我们上面刚刚创建的数据卷
local myVolume

(3)打印myVolume数据卷的详细信息

命令:docker volume inspect 一个或多个Volume名称

[root@192 ~]# docker volume inspect myVolume
[
{
"CreatedAt": "2021-03-19T15:13:50+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myVolume/_data",
"Name": "myVolume",
"Options": {},
"Scope": "local"
}
]

说明:

  • 每创建一个Volume,Docker默认会在宿主机的/var/lib/docker/volumes/目录下创建一个子目录,默认情况下目录名是一串UUID。
  • 如果指定了名称,则目录名是Volume名称(例如上面的myVolume)。Volume里的数据都存储在这个子目录的_data目录下。
  • MountPoint属性标识了,该数据卷在宿主机上的路径为/var/lib/docker/volumes/myVolume/_data

    Name属性标识了,数据卷的名称为myVolume

之后我们可以把这个数据卷挂载到一个新的容器中,例如Nginx容器。

执行如下命令:

docker run --rm \
--name Nginx01 \
-p 80:80 \
-v myVolume:/usr/share/nginx/html:ro \
-d nginx

说明:

  • --rm:容器停止后删除该容器。
  • --name Nginx01:给容器命名。
  • -p 80:80:端口映射。
  • -v myVolume:/usr/share/nginx/html:ro:配置刚创建的数据卷到新启动的容器。ro:只读。
  • -d nginx:后台运行该容器。

提示:这里主要是说明Docker Volume命令如何使用,在实际的工作用一般情况下都使用-v配置容器的数据卷挂载。

(4)删除数据卷

命令:docker volume rm 一个或多个Volume名称

# 删除myVolume数据卷
[root@192 ~]# docker volume rm myVolume
myVolume # 查看本地数据卷
[root@192 ~]# docker volume ls
DRIVER VOLUME NAME
local 0feb6247c783f1b3620b9dff44ace0c4f4071bc7470b55472f87701c916866ad
local 1d729d58cebf058fa9b14022ddd5211d1690fe6c9084e5c0576bb52743c170c1
local 45ae2157b3cd4ea4b04f2308cbb8562f46d56e9cb19a7aedb6391d35c44ac9b9
[root@192 ~]#

(5)删除所有未使用的数据卷

命令:docker volume prune

# 删除所有未使用的数据卷
[root@192 ~]# docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y # 你确定你要继续吗?
Deleted Volumes: # 删除的数据卷
0feb6247c783f1b3620b9dff44ace0c4f4071bc7470b55472f87701c916866ad
45ae2157b3cd4ea4b04f2308cbb8562f46d56e9cb19a7aedb6391d35c44ac9b9
1d729d58cebf058fa9b14022ddd5211d1690fe6c9084e5c0576bb52743c170c1 Total reclaimed space: 207MB # 回收总空间:207MB # 查看本地的数据,发现一个都没有了。
[root@192 ~]# docker volume ls
DRIVER VOLUME NAME
[root@192 ~]#

提示:只要该数据卷没有被正在运行的容器使用,都会被清楚。

3、具名挂载和匿名挂载

(1)匿名挂载

匿名挂载格式:-v /容器内路径或者-v /宿主机路径:/容器内路径

执行命令如下:

docker run -P --name nginx01 \ # 大P随机指定端口
-v /ect/nginx \ # 匿名挂载
-d nginx

此时查看本地Volume列表:

[root@192 ~]# docker volume ls
DRIVER VOLUME NAME
local 9c4f90cee862dc2c79246c9d1f01119c2ae9082a50f22e12f8b69b9496e3595b
[root@192 ~]#

这个一长串的UUID就是,就是该Volume没有名字,称为匿名挂载。

可以使用docker volume inspect UUID来查看这个Volume的详细信息

[root@192 ~]#  docker volume inspect 9c4f90cee862dc2c79246c9d1f01119c2ae9082a50f22e12f8b69b9496e3595b
[
{
"CreatedAt": "2021-03-19T16:35:13+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/9c4f90cee862dc2c79246c9d1f01119c2ae9082a50f22e12f8b69b9496e3595b/_data",
"Name": "9c4f90cee862dc2c79246c9d1f01119c2ae9082a50f22e12f8b69b9496e3595b",
"Options": null,
"Scope": "local"
}
]

(2)具名挂载

具名挂载格式:-v volume名称:/容器内路径或者-v volume名称:/宿主机路径:/容器内路径

执行命令如下:

docker run -P --name nginx02 \ # 大P随机指定端口
-v juming-nginx:/ect/nginx \ # 匿名挂载
-d nginx

此时查看本地Volume列表:

[root@192 ~]# docker volume ls
DRIVER VOLUME NAME
local 9c4f90cee862dc2c79246c9d1f01119c2ae9082a50f22e12f8b69b9496e3595b
local juming-nginx
[root@192 ~]#

我们得到的就是一个具有具体名称的Volume

我们通过具名挂载可以方便的找到某一个数据卷,一般情况下都使用具名挂载。

(3)Docker容器数据卷的默认挂载位置

所有的Docker容器内的卷,在没有指定宿主机目录的情况下,都是在宿主机的/var/nib/docker/vilumes/xxxx/data目录位置挂载数据。

# 进入宿主机docker目录/var/lib/docker/,
# docker的东西都在这个目录中。
[root@192 ~]# cd /var/lib/docker/
[root@192 docker]# ll
总用量 12
drwx--x--x. 4 root root 120 3月 15 02:00 buildkit
drwx-----x. 4 root root 150 3月 19 16:47 containers
drwx------. 3 root root 22 3月 15 02:00 image
drwxr-x---. 3 root root 19 3月 15 02:00 network
drwx-----x. 23 root root 8192 3月 19 16:47 overlay2
drwx------. 4 root root 32 3月 15 02:00 plugins
drwx------. 2 root root 6 3月 19 12:07 runtimes
drwx------. 2 root root 6 3月 15 02:00 swarm
drwx------. 2 root root 6 3月 19 16:30 tmp
drwx------. 2 root root 6 3月 15 02:00 trust
drwx-----x. 4 root root 142 3月 19 16:47 volumes # 查看volumes目录,里边存放的都收本地Docker中的数据卷
[root@192 docker]# ll volumes/
总用量 24
drwx-----x. 3 root root 19 3月 19 16:35 9c4f90cee862dc2c79246c9d1f01119c2ae9082a50f22e12f8b69b9496e3595b
drwx-----x. 3 root root 19 3月 19 16:47 juming-nginx
-rw-------. 1 root root 32768 3月 19 16:47 metadata.db # 进入juming-nginx中的_data目录就能看到nginx的配置文件nginx.conf
[root@192 docker]# cd volumes/juming-nginx/_data/
[root@192 _data]# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
[root@192 _data]#

『现学现忘』Docker基础 — 30、Docker中数据卷相关命令的更多相关文章

  1. 『学了就忘』Linux用户管理 — 51、用户管理相关命令

    目录 1.添加用户(useradd命令) 2.设定密码(passwd命令) 3.用户信息修改(usermod命令) 4.删除用户(userdel命令) 5.切换用户身份(su命令) 1.添加用户(us ...

  2. 『学了就忘』Linux用户管理 — 52、用户组管理相关命令

    目录 1.添加用户组 2.删除用户组 3.把用户添加进组或从组中删除 4.有效组(了解) 1.添加用户组 添加用户组的命令是groupadd. 命令格式如下: [root@localhost ~]# ...

  3. 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍

    目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...

  4. Docker基础修炼2--Docker镜像原理及常用命令

    通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...

  5. 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理

    目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...

  6. 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷

    目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...

  7. 『现学现忘』Docker基础 — 34、DockerFile文件详解

    目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...

  8. 『现学现忘』Docker基础 — 10、Docker的安装

    目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...

  9. 『现学现忘』Docker基础 — 11、Docker安装的问题补充

    目录 1.问题复现 2.解决冲突 3.重新安装docker-ce-selinux 4.安装Docker-ce 5.总结 通过yum安装Docker的时候,安装20版本的Docker没有出现问题,在安装 ...

随机推荐

  1. 【论文阅读笔记】-针对RSA的短解密指数的密码学分析(Cryptanalysis of Short RSA Secret Exponents)

    目录 1. 介绍 polynomially larger 2. 连分数背景知识 3. 连分数算法 4. 连分数算法在RSA中的应用 5. 例子 6. 对RSA连分数攻击的反制 7. 对于攻击的改进 8 ...

  2. 最好的Java开发工具---IDEA

    IntelliJ IDEA工具的使用 1. 常见的Java集成开发工具 Eclipse IBM团队研发的一个开源的非常好用的集成开发环境.寓意:吞并Sun公司.不过Sun最终被Oracle公司收购了. ...

  3. 6U VPX i7 刀片计算机

    一.产品概述 该产品是一款基于第三代Intel i7双核四线程(或四核八线程)的高性能6U VPX刀片式计算机.产品提供了可支持全网状交换的高速数据通道,其中P1,P2各支持4个PCIe x4 Gen ...

  4. 微信小程序常见两种登陆注册方式(一)

    普通登录注册以及用户授权登陆 普通登陆注册 概述 此功能的实现简单的借助了微信小程序的云开发,具体在哪里使用,我会标出来.对于用户名.账号.密码都做了简单的校验.主要练手功能的实现,样式只做了简单的编 ...

  5. GAN实战笔记——第四章深度卷积生成对抗网络(DCGAN)

    深度卷积生成对抗网络(DCGAN) 我们在第3章实现了一个GAN,其生成器和判别器是具有单个隐藏层的简单前馈神经网络.尽管很简单,但GAN的生成器充分训练后得到的手写数字图像的真实性有些还是很具说服力 ...

  6. Linux提权之信息收集

    1.操作系统版本 2.目标操作系统什么内核?多少位系统? 3.环境变量历史记录是否有利用? 4.运行了哪些服务和进程 top命令 5.安装了什么程序? 6.是否可以查看到root用户运行的进程 7.查 ...

  7. 记录一次有趣misc

    标题:2017_Dating_in_Singapore题目来源:XCTF 3rd-HITB CTF-2017题目描述:01081522291516170310172431-05060713202726 ...

  8. RFC3918组播转发时延测试——网络测试仪实操

    一.简介 1.RFC3918简介 历史 · 在1999年3月成为正式标准 功能 · 评测网络互连设备或网络系统的性能 · 网络设备: 交换机,路由器- 内容 · 定义了一整套测试方法,为不同厂家的设备 ...

  9. vim中的incsearch不好用,没有动态效果,为什么——incsearch is not working

    虽然使用Linux好多年了,使用vim也好多年了,但是使用vim进行search的时候重来也没有想过要添加动态效果,近来突然有了兴致想要添加这个功能,不过发现居然不好用,在百度上找了好长时间居然没有一 ...

  10. Activity通过bundle传递数据

    从AActivity.java向BActivity.java传递数据: 建立AActivity.java文件建立bundle: 1 public class AActivity extends App ...