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

为避免上述问题,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. CSS3动画animation认识,animate.css的使用

    CSS动画 可以取代js动画 在移动端会更加流畅! 下面是一个的绘制太阳系各大行星运行轨迹笔记,可以自学参考! -------------------------------------------- ...

  2. 学习方法分享:为何一年半就能拿到大厂 offer

    毕竟是聊聊曾经,放一张大学课堂上灵光一现,手写的一个我曾经一直使用的网名 前言 原文地址:Nealyang/personalBlog 讲真,的确是运气,才有机会进大厂.也没想到,那篇一年半工作经验试水 ...

  3. mysql 5.5之参数详解

    [mysql]default-character-set=utf8 [mysqld] datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock # ...

  4. jqGrid 日期格式化,只显示日期,去掉小时分

    {name:'operateTime',index:'operateTime', formatter:"date", formatoptions: {newformat:'Y-m- ...

  5. WordPress对接微信小程序遇到的问题

    1.文章内容中的“<”和“>”字符显示问题 小程序是使用“wxPares工具来实现html转wxml的,如果你的文本包含了代码比如xml会携带<>符号,程序会将其转化,造成解析 ...

  6. 转载:elastic5.x部署常见问题总结

    原博文名称:ElasticSearch 5.0.0 安装部署常见错误或问题 原博文地址为:http://www.dajiangtai.com/community/18136.do?origin=csd ...

  7. 清空div中的数据

    //清空div $("#divinput").val(""); $("#divimg").val(""); $(&quo ...

  8. thymeleaf 语法

    一.语法: 1. 简单表达式 (simple expressions) ${...}  变量表达式 *{...}  选择变量表达式 #{...}  消息表达式 @{...}  链接url表达式 2.字 ...

  9. MongoDB的全文索引

    ​ Table of Contents 背景 如何使用 准备工作:插入数据 建立全局索引 查询结果 使用中存在哪些问题? 英文存在停止词 中文无法采用全文索引 前面了解了多种索引方式,比如单键索引,多 ...

  10. 一条SQL查询语句是如何执行的?

    本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构. 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_inf ...