跟我学Docker:docker数据卷存储(六)

容器一般是用来封装打包软件,源码等环境配置的,而且重启一个容器很简单,所以容器经常被删除,因此不会轻易将数据或文件放在容器中,这时我们会在宿主机的某个地方或空间挂在到容器指定的位置,这就是容器的数据卷。

数据卷的作用:

1:持久化容器运行过程中产生的数据文件
2:实现多个容器间的文件共享。
正常情况下,删除容器,容器中所有的文件也会被删除。
创建一个数据卷 :docker volume create
查看数据卷列表 :docker volume ls
删除一个数据卷 :docker volume rm
查看一个数据卷的属性 : docker volume inspect

[root@docker01 ~]# docker volume create fxw
fxw
[root@docker01 ~]# docker volume ls
DRIVER              VOLUME NAME
local               fxw
[root@docker01 ~]# docker volume inspect fxw
[
    {
        "CreatedAt": "2019-07-24T14:08:11+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/fxw/_data",
        "Name": "fxw",
        "Options": {},
        "Scope": "local"
    }
]
[root@docker01 _data]# 

启动容器并将数据卷fxw挂载到nginx容器中:
-v fxw:/usr/share/nginx/html ,指定数据卷名称:容器指定目录

[root@docker01 _data]# docker run -d -p 80:80 -v fxw:/usr/share/nginx/html nginx:latest
1097890e5c43d57ffe2cd3c67ab05172151ffaba1dbd5680b0be703aa4d4b1cf
[root@docker01 _data]# docker ps -a -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
1097890e5c43        nginx:latest        "nginx -g 'daemon of…"   10 seconds ago      Up 9 seconds        0.0.0.0:80->80/t
[root@docker01 _data]# docker volume inspect fxw
[
    {
        "CreatedAt": "2019-07-24T14:12:35+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/fxw/_data",
        "Name": "fxw",
        "Options": {},
        "Scope": "local"
    }
]

通过查看数据卷fxw,可以发现数据卷fxw在宿主机上的真实地址为:/var/lib/docker/volumes/fxw/_data,相当于将改地址挂载到容器nginx的/usr/share/nginx/html目录,这是我们去改变/var/lib/docker/volumes/fxw/_data中的内容,先删除旧的文件,然后放入编写好的网页index.html,然后访问10.0.0.11:

old page
跟我学Docker:docker数据卷存储(六)_第1张图片
image.png
new page
跟我学Docker:docker数据卷存储(六)_第2张图片
image.png

因此nginx的数据放在宿主机的数据卷fxw上,这样既保证了数据的安全,又给开发人员提供了方便,同时当你部署分布式集群时,又能起到文件共享的作用,一举多得。

如果是集群共享,我们就不用每次都指定数据卷的路径,这里还有一个命令:
--volumes-from containerName 表示与容器containerName保持一致的数据卷,也是fxw数据卷(这里指定81端口映射到容器80端口)

[root@docker01 _data]# docker run -d -p 81:80 --volumes-from elegant_ardinghelli nginx:latest
2860f3a057d861105ab996732029f22af392e0a04d841fc41726f6893f1f4a78
[root@docker01 _data]# 
跟我学Docker:docker数据卷存储(六)_第3张图片
image.png

上面已经对数据进行了持久化,此时删掉容器,数据依然在宿主机。

[root@docker01 _data]# docker rm -f `docker ps -a -q`
2860f3a057d8
1097890e5c43
e4e1264fa87c
c1288955af2a
[root@docker01 _data]# docker volume inspect fxw
[
    {
        "CreatedAt": "2019-07-24T14:12:35+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/fxw/_data",
        "Name": "fxw",
        "Options": {},
        "Scope": "local"
    }
]
[root@docker01 _data]# ll /var/lib/docker/volumes/fxw/_data/
total 4
-rw-r--r-- 1 root root 3094 Jul 23 16:41 index.html
[root@docker01 _data]# 

除了采用数据卷的方式挂载之外,还可以直接挂载宿主机目录(90端口):

[root@docker01 abc]# docker run -d -p 90:80 -v /opt/abc/:/usr/share/nginx/html nginx:latest
52bfde2cbef6171594e7f8b7dc2ac859b22b4a8e3a13a380c7b1ffedab35fddc
[root@docker01 abc]# ll
total 4
-rw-r--r-- 1 root root 3094 Jul 23 16:41 index.html
[root@docker01 abc]# 
跟我学Docker:docker数据卷存储(六)_第4张图片
image.png

你可能感兴趣的:(跟我学Docker:docker数据卷存储(六))