9.数据卷

Docker提供了三种不同的方式将数据从宿主机挂载到容器中:volume,bind, mounts和temps。

volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)

bind mounts:可以存储在宿主机系统的内存中,而不会写入宿主机的文件系统。(相当去做了一个软连接)

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

Usage:	docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

1.管理卷

docker volume create nginx-vol

docker volume ls

docker volume inspect nginx-vol
[root@docker ~]# docker volume create nginx-vol  #创建一个数据卷
nginx-vol
[root@docker ~]# docker volume ls  #查看 
DRIVER              VOLUME NAME
local               nginx-vol
[root@docker ~]# docker volume inspect nginx-vol  #查看数据卷的详细信息
[
    {
        "CreatedAt": "2020-07-14T08:58:13+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
        "Name": "nginx-vol",
        "Options": {},
        "Scope": "local"
    }
]

2.用卷创建一个容器

docker run -d -it --name=nginx-test --mount src=nginx-vol ,dst=/usr/share/nginx/html nginx
docker run -d -it --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
[root@docker ~]# docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
d0a1ab042f4af3b861d5aa7bbb20c1a83710f63a53f82b042764c9415a1fa839

--mount: 指定了用哪个数据卷
src是数据卷地址
dst是目标路径

[root@docker ~]# docker exec -it nginx-test bash #进入容器
root@d0a1ab042f4a:/# cd /usr/share/nginx/html/   #进入挂载的目录下面
root@d0a1ab042f4a:/usr/share/nginx/html# ls  #查看文件
50x.html  index.html
root@d0a1ab042f4a:/usr/share/nginx/html#

#进入宿主机的目录进行验证
[root@docker _data]# pwd
/var/lib/docker/volumes/nginx-vol/_data
[root@docker _data]# ls
50x.html  index.

#新创一个1.html
root@d0a1ab042f4a:/usr/share/nginx/html# ls
1.html	50x.html  index.html
root@d0a1ab042f4a:/usr/share/nginx/html# exit
exit
[root@docker _data]# ls
1.html  50x.html  index.html

#删除所有的容器
[root@docker _data]# docker rm -f $(docker ps -q -a)
d0a1ab042f4a
ead5aab459f1
fb9dacd72137
c740a992c572
90a8aef6356b
7c77ab4e80fb
88a770ae905d
8e6de4d9c136
6ded32348de2
0f646d20ccb6
9dc1611db1ed
[root@docker _data]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@docker _data]# ls  #数据卷还在
1.html  50x.html  index.html

#这样的话 下次使用也可以直接用命令去引用
docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

[root@docker _data]# cat a.html  #新建一个文件
<h1>1212</h1>
 web界面访问ip:88/a.html
 
 #新建一个容器可以共享数据卷
 [root@docker _data]# docker run -d -it --name=nginx-test2 -p 89:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
9d420f1c3a3d79ce3e4034b63ce75ce3afb4485fcc487ff174500ffbd9b2c0a6

3.清理

docker container stop nginx-test

docker container rm nginx-test

docker volume rm nginx-vol

ps:

1.如果没有指定数据卷,自动创建一个匿名卷

2.建议使用 --mount ,更通用

官方文档 https://docs.docker.com/storage/volumes/

4.type

[root@docker _data]# docker run -d -it --name=nginx-test3  --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /app/wwwroot.  #提示不存在
See 'docker run --help'.

#新建一个目录/app/wwwroot 
[root@docker _data]# mkdir -p /app/wwwroot
[root@docker _data]# docker run -d -it --name=nginx-test3  --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
854f152a20767678b13b36cbc9c4fed026ce3bbb29aa01929b2e1a85ddc5bb93
[root@docker _data]# docker exec -it nginx-test3 bash
root@854f152a2076:/# mount
#查看挂载

#bind mount这个类型的挂载 会将宿主机上的隐藏
root@854f152a2076:/# ls /usr/share/nginx/html/
root@854f152a2076:/#    #是空目录

# 宿主机的目录下新建一个文件
[root@docker _data]# cd /app/wwwroot/
[root@docker wwwroot]# ls
[root@docker wwwroot]# touch 1.html
[root@docker wwwroot]# docker exec -it nginx-test3 bash
root@854f152a2076:/# ls /usr/share/nginx/html/
1.html

ps:
1.如果源文件/目录文件没有存在,不会自动创建,会被抛出一个错误
2.如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云原生解决方案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值