docker系列之(七)数据卷volume和bind mounts

因为容器删除后,数据不会保留。所以采用宿主机数据卷挂载到容器中,可以避免这种情况

Docker提供三种方式将数据从宿主机挂载到容器中

  • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
  • bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中
  • tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
volume挂载逻辑图
volume挂载逻辑图

例子:

创建volume

[root@docker ~]# docker volume create  nginx-vol
nginx-vol
[root@docker ~]# docker run -d -v nginx-vol:/usr/share/nginx/html nginx

查看宿主机的挂载路径

  • 使用docker inspect #容器id
  • 使用docker volume inspect #volume名
docker、技术与框架、新兴技术能力docker系列之(七)数据卷volume和bind mounts插图1
使用docker inspect
使用docker volume inspect
使用docker volume inspect

如果宿主机的内容修改,容器的内容也会修改

根据上述,继续完成例子

通过docker inspect #容器ID获得IP

docker、技术与框架、新兴技术能力docker系列之(七)数据卷volume和bind mounts插图3
容器的主页内容
容器的主页内容

重定义宿主机的主页

重定义容器内容
重定义容器内容

注意:如果容器删除,然后又使用该数据卷,宿主机数据卷内容不会被覆盖,但容器的文件会保持跟宿主机的数据卷内容一致。大致命令如下。

shell>docker ps
shell>docker stop #容器id
shell>docker rm -f #容器id
shell>docker run -d -v nginx-vol:/usr/share/nginx/html nginx
shell>docker inspect #容器id 得到对应的IP
shell>curl #上命令得到的ip

管理volume命令

创建:docker volume create #volume_name
列表:docker volume ls
明细:docker volume inspect #volume_name

清理挂卷volume

停止容器:docker stop #containerid
移除容器: docker rm #containerid
清除挂卷:docker volume rm #volume_name

注意:如果没有创建卷,会自动帮忙创建

Bind Mounts 一定要绝对路径

shell>docker run -d -v $PWD/wwwroot:/usr/share/nginx/html nginx
shell>docker ps
shell>docker inspect #容器id 获得id
shell>curl #ip 会提示403错误,因为wwwroot是新建的,没有index.html
shell>echo  222 >> /wwwroot/index.html
shell>curl #ip  ##这时就会得到内容

注意:如果挂载的是空目录,会清空容器的原有配置,导致容器运行不成功。例如安装RocketMq的时候。

下面我们讲解docker的网络

http://www.fcors.com/%e6%8a%80%e6%9c%af%e4%b8%8e%e6%a1%86%e6%9e%b6/docker%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%88%e5%85%ab%ef%bc%89%e7%bd%91%e7%bb%9c%e6%a8%a1%e5%bc%8f/