要解决的问题:在移除了现有容器或者添加了新容器时,之前容器的数据无法访问。

为避免上述问题,Docker提供了以下策略来持久化数据

1.tmpfs挂载

2.绑定挂载

将Docker宿主机上的文件/目录挂载到容器中(就是说将host文件系统中的数据借给容器用)。注意:数据流在Docker宿主机和容器之间是双向流动的,任何破坏性的操作(比如删除一个目录)也都会对宿主机产生负面影响

host源(又称mount源)----------container目标(又称mount point)

目录:如果container目录已存在,则源数据会被隐藏并被替换为host源中的数据

文件:向容器中添加文件,同时也保留了容器原有的数据

# 将宿主机的主目录挂载到容器中一个名为host-name的目录
[root@localhost chrome]# docker run -it --name mount-test -v $HOME:/host-name ubuntu bash
root@e7b70f5681cf:/# ll
total
drwxr-xr-x. root root Sep : ./
drwxr-xr-x. root root Sep : ../
-rwxr-xr-x. root root Sep : .dockerenv*
drwxr-xr-x. root root Sep : bin/
drwxr-xr-x. root root Apr boot/
drwxr-xr-x. root root Sep : dev/
drwxr-xr-x. root root Sep : etc/
drwxr-xr-x. root root Apr home/
dr-xr-x---. root root Sep : host-name/
drwxr-xr-x. root root May lib/
drwxr-xr-x. root root Sep : lib64/
drwxr-xr-x. root root Sep : media/
drwxr-xr-x. root root Sep : mnt/
drwxr-xr-x. root root Sep : opt/
dr-xr-xr-x. root root Sep : proc/
drwx------. root root Sep : root/
drwxr-xr-x. root root Sep : run/
drwxr-xr-x. root root Sep : sbin/
drwxr-xr-x. root root Sep : srv/
dr-xr-xr-x. root root Sep : sys/
drwxrwxrwt. root root Sep : tmp/
drwxr-xr-x. root root Sep : usr/
drwxr-xr-x. root root Sep : var/
root@e7b70f5681cf:/# pwd
/
root@e7b70f5681cf:/# cd host-name/
root@e7b70f5681cf:/host-name# touch a.txt # 进入容器内再host-name目录下创建文件a.txt
root@e7b70f5681cf:/host-name# ll
total
dr-xr-x---. root root Sep : ./
drwxr-xr-x. root root Sep : ../
-rw-------. root root Sep : .bash_history
-rw-r--r--. root root Dec .bash_logout
-rw-r--r--. root root Dec .bash_profile
-rw-r--r--. root root Dec .bashrc
drwx------. root root Sep : .cache/
drwxr-xr-x. root root Sep : .config/
-rw-r--r--. root root Dec .cshrc
drwx------. root root Sep : .dbus/
drwx------. root root Sep : .docker/
-rw-------. root root Sep : .esd_auth
drwx------. root root Sep : .gnupg/
drwxr-xr-x. root root Sep : .gstreamer-0.10/
-rw-r--r--. root root Mar .gtkrc-2.0-kde4
drwxr-xr-x. root root Sep : .kde/
drwxr-xr-x. root root Sep : .local/
drwxr-----. root root Sep : .pki/
-rw-r--r--. root root Dec .tcshrc
-rw-------. root root Sep : .viminfo
drwxr-xr-x. root root Sep : Desktop/
drwxr-xr-x. root root Sep : Documents/
drwxr-xr-x. root root Sep : Downloads/
drwxr-xr-x. root root Sep : Music/
drwxr-xr-x. root root Sep : Pictures/
drwxr-xr-x. root root Sep : Public/
drwxr-xr-x. root root Sep : Templates/
drwxr-xr-x. root root Sep : Videos/
-rw-r--r--. root root Sep : a.txt
-rw-------. root root Sep : anaconda-ks.cfg
-rw-r--r--. root root Sep : ch.exe.part
-rw-r--r--. root root Sep : initial-setup-ks.cfg # 再Docker宿主机打开一个新的终端窗口并输入以下命令,可发现宿主机上存在a.txt
[root@localhost chrome]# cd ~
[root@localhost ~]# ll
total
-rw-------. root root Sep : anaconda-ks.cfg
-rw-r--r--. root root Sep : a.txt
-rw-r--r--. root root Sep : ch.exe.part
drwxr-xr-x. root root Sep : Desktop
drwxr-xr-x. root root Sep : Documents
drwxr-xr-x. root root Sep : Downloads
-rw-r--r--. root root Sep : initial-setup-ks.cfg
drwxr-xr-x. root root Sep : Music
drwxr-xr-x. root root Sep : Pictures
drwxr-xr-x. root root Sep : Public
drwxr-xr-x. root root Sep : Templates
drwxr-xr-x. root root Sep : Videos
# 再Docker宿主机中终端输入以下命令,以停止这个容器
[root@localhost ~]# docker stop mount-test
mount-test
[root@localhost ~]# docker rm mount-test
mount-test # 确认Docker宿主机上a.txt文件依旧存在 [root@localhost ~]# cd ~
[root@localhost ~]# ll
total
-rw-------. root root Sep : anaconda-ks.cfg
-rw-r--r--. root root Sep : a.txt
-rw-r--r--. root root Sep : ch.exe.part
drwxr-xr-x. root root Sep : Desktop
drwxr-xr-x. root root Sep : Documents
drwxr-xr-x. root root Sep : Downloads
-rw-r--r--. root root Sep : initial-setup-ks.cfg
drwxr-xr-x. root root Sep : Music
drwxr-xr-x. root root Sep : Pictures
drwxr-xr-x. root root Sep : Public
drwxr-xr-x. root root Sep : Templates
drwxr-xr-x. root root Sep : Videos

3.卷

Docker卷是目前最为推荐的将容器中存储的数据持久化的方法,卷完全是由docker托管的。

与绑定挂载不同的是在容器中写入的文件,在移除容器后,再次启动具有附加卷的新容器时,容器中的文件依然存在,但是不会显示写进任何Docker宿主机目录

[root@localhost ~]# docker volume create --name=nginx-volume
nginx-volume
[root@localhost ~]# docker volume inspect nginx-volume
[
{
"CreatedAt": "2019-09-22T04:58:44-04:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
"Name": "nginx-volume",
"Options": {},
"Scope": "local"
}
]
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local nginx-volume

Docker中的VOLUME命令

VOLUME指令会将附加在该指令之后的路径标记为外部的由Docker托管的数据存储卷。语法如下:

VOLUME ["/data-volume"]

Docker卷的更多相关文章

  1. Docker - 卷组管理(三)

    一.不指定宿主机目录 首先运行一个nginx容器 docker run -d --name mynginx -p 8080:80 -v /usr/share/nginx/html nginx --na ...

  2. docker卷管理(四)

    什么是数据卷 overlay2存储卷 docker镜像是由多个只读层叠加而成,启动容器时,docker会加载只读镜像层,并在镜像栈顶部添加一个可写层 如果运行中的容器修改了现有的一个已存在文件,那该文 ...

  3. docker卷挂载与容器内外互相拷贝数据

    一.宿主机与容器的挂载 docker可以支持把一个宿主机上的目录挂载到镜像里.命令如下: docker run -it -v /mydownload:/download nginx:v1 /bin/b ...

  4. Docker 容器数据卷(Data Volume)与数据管理

    卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...

  5. docker数据卷技术

    数据卷技术 数据卷手动挂载 数据卷容器 part1:数据卷挂载方式 数据卷手动挂载 -v 主机目录:容器目录 #核心参数 #示例 docker run -it --name=centos_test - ...

  6. Docker生产环境实践指南

    技术栈:1. 构建系统2. 镜像仓库3. 宿主机管理4. 配置管理5. 部署6. 编排7. 日志8. 监控 镜像:1. 如果用户像往常一样运行包安装命令,这些永远也用不上的缓存包文件将会永远地成为镜像 ...

  7. Docker 1.13 管理命令

    1.12 CLI 的问题 Docker1.12 命令行接口(CLI)有40多个顶级命令,这些命令存在以下问题: 没有归类组织,这让docker 新手很难学习: 有些命令没有提供足够的上下文环境,以至于 ...

  8. Docker存储驱动之Device Mapper简介

    Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别, ...

  9. 从零开始学习 Docker

      这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创.学习过程中整理成适合我自己的笔记,其中也包含了我自己的 ...

随机推荐

  1. Java面向对象程序设计第5章1-9

    1.面向对象的主要特征是什么? 三大特征是:封装.继承和多态. 封装:是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象. 继承: ...

  2. Vue学习之vue中的v-if,v-show,v-for

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 将字符串转换成json格式

    1.引入json依赖,在pom.xml文件里添加如下内容 <!--Json array start --> <dependency> <groupId>common ...

  4. (七十五)c#Winform自定义控件-控件水印组件

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  5. 彻底关闭Windows10的更新

    Windows10的自动更新太恶心,关闭之后总能死灰复燃,更新偶尔占用大量的CPU内存,非常影响使用.而网上大多数都是关闭服务之类的方法,但是关闭之后没过多久又会重新自动启动,如何彻底摆脱wiondo ...

  6. 读《深入理解Elasticsearch》点滴-基础概念

    Lucene的概念 document:以json的形式体现,搜索和搜索的主要载体 field:document的一个部分 term(词项):代表文本中的一个词 token(词条):term在field ...

  7. js三级联动效果city-picker

    链接:https://pan.baidu.com/s/1NE_EO5_xGvR-y-lboYap7g 提取码:h00e 效果展示: 解决: 动态赋值: 注意:在执行赋值之前,必须执行reset和des ...

  8. jedis指定数据库

    正常情况下,我们通过get或者set方法是从db0中取数据. 1.redis提供了 select命令,可以通过select index 这个指令,将数据库切换到index所在的那个数据库上 2.jed ...

  9. Flask基础(17)-->防止 CSRF 攻击

    CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...

  10. idea必备快捷键

    ctrl + F: 在当前文件进行文本查找 ctrl + R: 在当前文件进行文本的替换 ctrl + Z: 撤销操作 ctrl + Y:删除光所在的行 或者选中的行 ctrl + D: 复制光标所在 ...