原创

Docker-Volume

为什么需要存储卷

  1. 关闭并重启容器,其数据不受影响;但删除 Docker 容器,则其更改会全部丢失;
  2. 数据存储于联合文件系统,IO 效率低下,并且不易于宿主机访问;
  3. 容器间数据共享不便

存储卷(volume)是容器上的一个或多个目录,此类目录可绕过联合文件系统,与宿主机上的某个目录绑定(关联)。

使用存储卷的优势:1.存储卷的数据可以脱离容器生命周期持久存储;2.全集群范围调度容器。

对于有状态的进程,存储卷是必须的。

Volume 是独立于容器的生命周期实现数据持久化的,因此删除容器时既不会删除卷,也不会对未引用的卷做垃圾回收操作。

Volume 类型

Docker 用两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置是不同的:

  • Bind mount volume

需要手动指定容器和宿主机特定的目录,宿主机的目录如果不存在,会自动创建。

  • Docker-managed volume

Docker daemon 自行维护宿主机的目录

使用存储卷

docker-managed volume

~]# docker container run -it -name bbox1 -v /data busybox

~]# docker inspect -f {{.Mounts}} bbox1 #查看 bbox1 容器的卷、卷标识符及挂载的主机目录

bind-mount Volume

~]# docker container run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox

~]# docker inspect -f {{.Mounts}} bbox2

~]# docker inspect -f {{.NetwordSettings.IPAddress}} bbox2 模板的使用方法查看容器 IP

Sharing volumes

  • 多个容器的卷使用同一个主机目录

~]# docker container run -it --name c1 -v /docker/volumes/v1:/data/ busybox

~]# docker container run -it --name c2 -v /docker/vloumes/v2:/data busybox

  • 复制使用其他容器的卷,为 docker run 命令使用 --volume-from 选项

~]# docker container run -it --name bbox1 -v /docker/volumes/v1:/data busybox #此容器作为基础架构支撑容器完全可以不运行,只需要本地存在此容器即可。

~]# docker container run --it --name bbox2 --volumes-from bbox1 busybox

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker 实践之 Overlay网络

    使用上述软硬件架构创建3个VMs/hosts,每个host使用两个网络连接:一个桥接网络(网卡名称“enp0s3”)和一个Host-only网络(网卡名称“en...

    懒人的小脑
  • 管理 Linux 服务

    服务是对外提供服务的进程,一般来说服务都会放在后台,由于服务是要持续不断的提供外界随时发来的服务请求,服务进程就需要常驻在内存中,且不应该和终端有关,否则终端退...

    懒人的小脑
  • 100个Linux命令(6)-软件管理 rpm 和 yum

    这是100个 Linux 命令中的第59和60个命令,主要是用于管理软件的 rpm 和 yum 命令,以及 Linux 中关于软件的一些你应该知道的基础知识。

    懒人的小脑
  • 浅析Docker运行安全

    AppArmor 主要的作用是设置某个可执行程序的访问控制权限,可以限制程序 读/写某个目录/文件,打开/读/写网络端口等等。

    FB客服
  • docker学习13-docker容器的文件导入和导出

    搭建的docker环境,经常需要与docker容器内部文件交互,把外部的文件(或宿主机)传到容器内部。 或者把容器内部的文件导出来

    上海-悠悠
  • Docker 循序渐进

    上一篇大致介绍了什么是Docker和其安装(以Ubuntu为例)。这篇来说说,Docker的基本操作。 非Root用户授权 上一篇的演示中使用的都是默认登...

    李郑
  • Docker循序渐进

    上一篇的演示中使用的都是默认登录了Root权限后的操作,而实际的开发运维情况下,我们一般极少使用Root权限,所以Docker提供了一个权限组,我们只需要把当前...

    李郑
  • Docker搭建MySQL服务

    前面我们已经安装好了Docker,也简单了解了Docker。那么我们可以尝试搭建一个MySQL服务。

    双面人
  • Docker 容器互联

    docker run -d --name database -e MYSQL_ROOT_PASSWORD=root mysql docker run -d -...

    用户5760343
  • 你知道 varchar(N) 或 varchar2(N) 中的 N 是字符数还是字节数?

    其中 book_name 是 varchar(20) 类型。 插入 sql 语句如下:

    IT技术小咖

扫码关注云+社区

领取腾讯云代金券