服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Docker 从门到精通(四)一 数据卷的使用

Docker 从门到精通(四)一 数据卷的使用

2023-05-08 18:01未知服务器之家 Linux

导读 docker 是下面的容器技术,是目前最火的开源技术之一,我们介绍了docker的基本使用,基本,本地网络设置,本地仓库等,今天我们介绍下docker的数据卷的使用。 一,数据卷的使用 有时候需要使用数据库,但是又希望它的数据

导读 docker 是 下面的容器技术,是目前最火的开源技术之一,我们介绍了docker的基本使用,基本 ,本地网络设置,本地仓库等,今天我们介绍下docker的数据卷的使用。
一,数据卷的使用

有时候需要使用数据库,但是又希望它的数据能保存在本地,Docker中提供了数据卷可以供你方便的操作数据。数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷可以在容器之间共享和重用

对数据卷的修改会立马生效

对数据卷的更新,不会影响镜像

数据卷默认会一直存在,即使容器被删除

*注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。

Docker 从门到精通(四)一 数据卷的使用

添加一个数据卷:
#dockerrun-d-it--namebusybox-v/data/busybox

这会在容器内创建一个 /data 目录,并加载一个数据卷到容器的 /data 目录。

进入容器:
#dockerexec-itbusyboxsh

查看目录映射:

#dockerinspect-f{{.Volumes}}busybox
map[/data:/var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data]
可以看到将容器中的/data目录映射到了/var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data这个目录下,所以数据在容器中的/data目录和此目录下是同步的。
[root@sta2data]#cd/var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data
[root@sta2_data]#touchb

在容器中 /data 目录下查看:

/data#ls
ab
b文件依然存在。

数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个 。

[root@sta2docker]#dockerstopeec30d8d6fce
[root@sta2docker]#dockerrm-veec30d8d6fce

使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去,-v 标记也可以从主机挂载单个文件到容器中

[root@sta2docker]#dockerrun-it--namemybusybox-v/data:/databusyboxsh

这种方法相当于在本机中指定了要映射的目录,将本地的数据卷 /data 目录加载到容器中的 /data 目录。

/#cd/data/
/data#ls
a
/data#touchc

然后在本机的 /data 目录查看 c 文件是否存在:

[root@sta2data]#ls
ac

Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。

#dockerrun-it--namemybusybox-v/data:/data:robusyboxsh
二,数据卷容器

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。

[root@sta2data]#dockerrun-d-v/data/--namedbdatabusybox#首先,创建一个名为dbdata的数据卷容器

然后,在其他容器中使用 –volumes-from 来挂载 dbdata 容器中的数据卷。

#dockerrun-d--volumes-fromdbdata--namedb1nginx

#dockerrun-d--volumes-fromdbdata--namedb2nginx

也可以使用 –volumes-from 来挂载来自多个容器的多个数据卷:

#dockerrun-d--namedb3--volumes-fromdb1--volumes-fromdbnginx

提示:使用 –volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态。

备份数据卷

首先使用 –volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从主机挂载当前目录到容器的 /backup 目录。命令如下:

#dockerrun--volumes-fromdbdata-v/data:/backupbusyboxtarcvf/backup/backup.tar.gz/data/
恢复

如果要恢复数据到一个容器,首先创建一个带有空数据卷的容器 dbdata2。

#dockerrun-v/dbdata--namedbdata2ubuntu/bin/bash

然后创建另一个容器,挂载 dbdata2 容器卷中的数据卷,并使用 untar 解压备份文件到挂载的容器卷中。

#dockerrun--volumes-fromdbdata2-v/data:/backupbusyboxtarxvf/backup/backup.tar.gz

为了查看/验证恢复的数据,可以再启动一个容器挂载同样的容器卷来查看

#dockerrun--volumes-fromdbdata2busybox/bin/ls/dbdata
删除数据

如果删除了挂载的容器(db1 和 db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。

原文来自:


延伸 · 阅读

精彩推荐
  • Linux教你如何在 Linux 上为 SSH 登录设置电子邮件提醒

    教你如何在 Linux 上为 SSH 登录设置电子邮件提醒

    在本文中介绍如何在Linux系统上为ssh登录设置电子邮件提醒。以接收有关对root用户的未经授权或非法登录访问的警报。...

    Linux就该这么学6342021-03-08
  • LinuxLinux网络相关配置文件

    Linux网络相关配置文件

    这篇文章主要介绍了Linux网络相关配置文件的相关资料,通过本文希望大家能对Linux 网路配置文件的掌握,需要的朋友可以参考下...

    iteye7272022-02-13
  • LinuxLinux 通过 autojump 命令减少 cd 命令的使用的实现方法

    Linux 通过 autojump 命令减少 cd 命令的使用的实现方法

    这篇文章主要介绍了Linux 通过 autojump 命令减少 cd 命令的使用的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    简简单单OnlineZuozuo1782020-09-19
  • LinuxLinux下安装php加速软件Xcache的方法

    Linux下安装php加速软件Xcache的方法

    这篇文章主要介绍了Linux下安装php加速软件Xcache的方法,需要的朋友可以参考下...

    osyunwei7202021-10-27
  • Linux使Linux系统上的程序开机后自动运行

    使Linux系统上的程序开机后自动运行

    Linux有自己一套完整的启动体系,抓住了Linux启动的脉络,Linux的启动过程将不再神秘。 阅读之前建议先看一下附图。 本文中假设inittab中设置的init tree为:...

    Linux教程网5292020-04-14
  • Linux2016年如何选择Linux发行版

    2016年如何选择Linux发行版

    这篇文章主要介绍了2016年选择Linux发行版的标准和原则,挑选几个将在2016 年里大放光彩的最佳发行版给大家介绍一下,感兴趣的小伙伴们可以参考一下...

    Linux教程网12402021-11-02
  • LinuxLINUX的端口和服务

    LINUX的端口和服务

    端口号与相应服务的对应关系存放在/etc/services文件中,这个文件中可以找到大部分端口。使用netstat命令 ...

    Linux教程网5782020-04-18
  • Linux如何在Windows系统上利用Telnet协议连接Linux服务器?

    如何在Windows系统上利用Telnet协议连接Linux服务器?

    如何利用Telnet连接Linux服务器?Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力。很多终端使用者都习...

    服务器之家6162019-10-18