Docker数据卷

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、数据卷介绍
  • 二、简单使用
  • 三、 常用命令
  • 四、具名挂载和匿名挂载
    • 4.1 匿名挂载
    • 4.2 具名挂载
  • 五、数据卷容器


前言

上一篇总结了Docker入门知识。命令比较多,需要经常使用才能记住。下面继续深入学习Docker。


一、数据卷介绍

数据放在容器中,和容器生命周期相同,存在被删除的风险。如果能够放在宿主机上就会好很多。为了容器数据持久化和同步操作,引出数据卷。
数据卷的特点:

数据卷可在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止

二、简单使用

运行容器,指定挂载数据卷命令,可以实现双向同步:

docker run -it -v 主机目录:容器目录

Docker数据卷_第1张图片
Docker数据卷_第2张图片
查看容器对应元数据docker inspect 容器id,可以在Mounts节点查看建立的数据卷信息。
Docker数据卷_第3张图片
即使容器停止运行或者容器删除,仍然可以实现数据同步,本地的数据卷不会丢失。

三、 常用命令

(1)创建数据卷

docker volume create my-vol

(2)查看所有的数据卷

$ docker volume ls
local my-vol

(3)查看指定数据卷的信息

$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]

(4)删除数据卷 docker volume rm …

$ docker volume rm my-vol

(5)删除容器之时删除相关的卷

$ docker rm -v ...

四、具名挂载和匿名挂载

4.1 匿名挂载

匿名挂载就是在指定数据卷的时候,不指定容器路径对应的主机路径,只定义容器内目录,这样对应映射的主机路径就是默认的路径/var/lib/docker/volumes/中自动生成一个随机命名的文件夹。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
d3a27b969d122d5516cac75e99b17dff7aaaf1e0c042385c6b05990053f1259
#查看所有的数据卷volume的情况
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls
DRIVER    VOLUME NAME
local     0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
local     668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
local     e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a

4.2 具名挂载

具名挂载,就是指定文件夹名称,区别于指定路径挂载。具名挂载指定文件夹名称是在Docker指定的默认数据卷路径下的。通过docker volume ls命令可以查看当前数据卷的目录情况。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
4ceaff19e5275dcd3014a8e7a8af618f7f7ce0da18d605c7c41a8653e78bf912
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls
DRIVER    VOLUME NAME
local     0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
local     668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
local     e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a
local     juming-nginx

匿名挂载,具名挂载和指定路径挂载的命令区别如下:
-v 容器内路径 #匿名挂载

-v 卷名:容器内路径 #具名挂载

-v /宿主机路径:容器内路径 #指定路径挂载

指定数据卷映射的相关参数:

ro —— readonly 只读。设置了只读则只能操作宿主机的路径,不能操作容器中的对应路径。

rw ----- readwrite 可读可写

五、数据卷容器

容器数据卷是指建立数据卷,来同步多个容器间的数据,实现容器间的数据同步。

首先启动容器1,volume01、volume02为挂载目录。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it --name cnetos01 test/centos:1.0
[root@731d53b8c3d5 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02

#然后启动容器2,通过参数--volumes-from,设置容器2和容器1建立数据卷挂载关系。

[root@iZwz99sm8v95sckz8bd2c4Z /]# docker run -it --name centos02 --volumes-from cnetos01 test/centos:1.0
[root@7f90d4147511 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  360 Dec 30 14:58 dev
drwxr-xr-x   1 root root 4096 Dec 30 14:58 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 108 root root    0 Dec 30 14:58 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Dec 29 15:41 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var
drwxr-xr-x   2 root root 4096 Dec 30 14:54 volume01
drwxr-xr-x   2 root root 4096 Dec 30 14:54 volume02

假如docker01停止或者删除,数据卷不会删除。

你可能感兴趣的:(容器,docker)