Docker数据持久化

这篇具有很好参考价值的文章主要介绍了Docker数据持久化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据持久化

在容器层的 UnionFS(联合文件系统)中对文件/目录的任何修改,无论是手工修改还是

容器在运行过程中的修改,在该容器丢失或被删除后这些修改将全部丢失。即这些修改是无

法保存下来的。若要保存下来这些修改,通常有两种方式:

  • 定制镜像持久化:将这个修改过的容器生成一个新的镜像,让这些修改变为只读的镜像

  • 数据卷持久化:将这些修改通过数据卷同步到宿主机

数据持久化主要解决的问题如下:

  1. 数据丢失:在默认情况下,Docker容器内部产生的数据存储在其自身的存储层上。当容器停止运行或被删除时,与该容器关联的存储层也会被清理,这意味着所有在容器运行期间生成或修改的数据都将永久丢失。
  2. 迁移和备份困难:由于容器存储层与容器生命周期紧密相连,如果需要将数据从一个容器移动到另一个容器,或者需要对数据进行备份和恢复操作,会非常复杂且不可靠。
  3. 多容器共享数据:在实际应用中,可能需要多个容器之间共享某些数据,例如数据库服务和Web服务器之间。但是,容器间的直接文件系统交互并不方便,也不利于容器的独立性和可移植性。
  4. 性能考量:容器存储层通常是通过联合文件系统(如AUFS、OverlayFS等)实现的,频繁写入这类文件系统的性能可能不如直接写入宿主机的磁盘。

假如我拉取一个tomcat:10.0

docker pull tomcat:10.0

然后运行

docker run --name mytom -dp 8081:8080 tomcat:10.0

Docker数据持久化,Docker,docker,容器,运维

删除webapps,然后把webapps.dist改名为webapps

Docker数据持久化,Docker,docker,容器,运维

保存镜像

docker commit -m"modify webapps" -a="Hayaizo" mytom tomcat10:own

Docker数据持久化,Docker,docker,容器,运维

docker run --name mytom11 -dp 8081:8080 tomcat10:own

运行镜像:

Docker数据持久化,Docker,docker,容器,运维

数据卷

Docker 提供了三种实时同步(宿主机与容器 FS 间数据的同步)方式:

  • 数据卷

  • Bind mounts(绑定挂载)

  • tmpfs(临时文件系统)

数据卷简介

数据卷是宿主机中的一个特殊的文件/目录,这个文件/目录与容器中的另一个文件/目录进行了直接关联,在任何一端对文件/目录的写操作,在另一端都会同时发生相应变化。

在宿主中的这个文件/目录就称为数据卷,而容器中的这个关联文件/目录则称为该数据卷在该容器中的挂载点。

数据卷的设计目的就是为了实现数据持久化,其完全独立于容器的生命周期,属于宿主机文件系统,但不属于 UnionFS。因此,容器被删除时,不会删除其挂载的数据卷。

数据卷的特性

数据卷具有如下明显特性:

  • 数据卷在容器启动时初始化,如果容器启动后容器本身已经包含了数据,那么,这些数

  • 据会在容器启动后直接出现在数据卷中,反之亦然

  • 可以对数据卷或挂载点中的内容直接修改,修改后对方立即可看到

  • 数据卷会一直存在,即使挂载数据卷的容器已经被删除

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

其实底层就是通过Linux硬链接实现的(ln)。

数据卷的创建

读写数据卷指的是容器对挂载点具有读写权限。

命令

数据卷是在使用 docker run 启动容器时指定的,其语法格式为:

docker run –it –v /宿主机目录绝对路径:/容器内目录绝对路径 镜像

注:无论是宿主机中的数据卷还是容器中的挂载点,如果指定的目录不存在,那么 docker引擎都会自动创建。即使是多级目录不存在。

docker run --name mycent -v /root/xxx/aaa:/opt/ooo/bbb -it centos:7

Docker数据持久化,Docker,docker,容器,运维

可以看到会自动创建目录,即使是一个多级目录。

在宿主机中同样会创建目录。

Docker数据持久化,Docker,docker,容器,运维

我在宿主机创建一个hello.cc

Docker数据持久化,Docker,docker,容器,运维

Docker数据持久化,Docker,docker,容器,运维

只读数据卷的创建

只读数据卷,指的是容器对挂载点的操作权限是只读的。宿主机对数据卷的操作权限始终是读写的。

有些情况下,为了防止容器在运行过程中对文件产生修改,就需要创建只读数据卷。

命令

该命令仅比之前的命令仅多了:ro,具体语法如下:

docker run –it –v /宿主机目录绝对路径:/容器内目录绝对路径:ro 镜像

创建数据卷

以交互方式启动一个 ubuntu 容器,同时指定在启动容器时创建只读数据卷。

docker run --name myu -it -v /root/host_mount:/opt/ddd:ro ubuntu:latest /bin/bash

Docker数据持久化,Docker,docker,容器,运维

数据卷共享

当一个容器与另一个容器使用相同的数据卷时,就称这两个容器实现了“数据卷共享”。

当一个容器 C 启动运行时创建并挂载了数据卷,若其它容器也需要共享该容器 C 挂载的数据卷,这些容器只需在 docker run 启动时通过–volumes-from[容器 C] 选项即可实现数据卷共享。此时容器 C 就称为数据卷容器。

docker run --name mycent2 --volumes-from mycent centos:7 

Docker数据持久化,Docker,docker,容器,运维

docker run --name myunbuntu --volumes-from mycent -it ubuntu /bin/bash

Docker数据持久化,Docker,docker,容器,运维

需求:myubuntu2 容器要共享前面的 myubuntu 容器的数据卷,即宿主机中/root/host_mount

为数据卷目录,而这两个容器的挂载点目录都是/opt/uc_mount。

通过 docker exec 命令进入 myubuntu 容器后,进入挂载点目录/opt/uc_mount。

Docker数据持久化,Docker,docker,容器,运维

这里在创建并运行 myubuntu2 容器时,使用–volumes-from 指定该容器要共享 myubuntu的数据卷,即指定 myubuntu 容器为数据卷容器。此时可以发现,myubuntu2 容器中也同样出现了挂载点目录/opt/uc_mount。

Docker数据持久化,Docker,docker,容器,运维

经过上述操作,myubuntu 与 myubuntu2 这两个容器实现了数据卷共享。此时,无论是在宿主机,还是 myubuntu 或 myubuntu2 任意容器中挂载点目录中的任意写操作,在另外两方均可同步看到该写操作的结果。

下面举例:

首先在宿主机数据卷目录中创建一个文件 data.log。

Docker数据持久化,Docker,docker,容器,运维

在 myubuntu 容器中可以查看到 data.log 文件。然后,myubuntu 容器也修改该文件。

Docker数据持久化,Docker,docker,容器,运维

在 myubuntu2 容器中可以查看到 data.log 文件。然后,myubuntu2 容器也修改该文件。

Docker数据持久化,Docker,docker,容器,运维

myubuntu2 容器对文件的修改,在 myubuntu 容器与宿主机中均可看到。

Docker数据持久化,Docker,docker,容器,运维

Docker数据持久化,Docker,docker,容器,运维

Dockerfile持久化

Dockerfile 持久化,其实就是通过使用 Dockerfile 的 VOLUME 指令指定数据卷方式实现的持久化。

VOLUME指令

VOLUME 指令可以在容器中创建可以挂载数据卷的挂载点。其参数可以是字符串数组,也可以是使用空格隔开的多个纯字符串。例如:

VOLUME [“/var/www”,“/etc/apache”] 或

VOLUME /var/www /etc/apache。

FROM centos:7
VOLUME /opt/xxx /opt/ooo
CMD /bin/bash

Docker数据持久化,Docker,docker,容器,运维

Docker数据持久化,Docker,docker,容器,运维

挂载点有了,那么我的源在哪呢?

docker inspect

Docker数据持久化,Docker,docker,容器,运维

在这可以看到Source,这是docker daemon自动分配的。文章来源地址https://www.toymoban.com/news/detail-816382.html

到了这里,关于Docker数据持久化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yapi容器化docker部署以及mongodb容器的持久化挂载异常问题

    通过docker形式部署yapi,需要准备一个mongodb,然后直接在一个空文件夹里写好Dockerfile,其中通过wget下载yapi的zip包。 基本按照这篇文章:https://www.modb.pro/db/149666 来处理即可 把mongodb的docker 跑起来, --auth 表示需要密码才能访问 注意 原文中启动mongo的容器是这样的 首先创建Mon

    2024年02月14日
    浏览(36)
  • Docker安装mysql&&使用Navicat远程连接mysql容器&&mysql容器的持久化测试

    文章主人公:帅哥BUG😎  文章路人: 路人 🤨  路人 😛 目录 一.安装mysql并配置文件 1.下载相关镜像 2.在宿主机中创建相关目录,用于挂载容器的相关数据 3.conf目录 4.data目录(创建mysql5.7容器) 二.使用Navicat远程连接mysql容器 1.ip addr 获取ip 2.点击连接选择MySql 3.输入ip,密码

    2024年02月03日
    浏览(38)
  • docker的数据卷、docker数据持久化

    环境: centos7.9 docker version 20.10.14 本篇我们来介绍docker的数据卷,数据卷是用于实现docker数据的持久化。 使用docker过程中,我们需要持久化容器中产生的数据,以及容器与容器之间、容器与主机之前进行数据共享、备份等操作,这里就需要到容器的数据持久化管理。 docker的数

    2024年02月09日
    浏览(31)
  • Docker数据持久化

    在容器层的 UnionFS(联合文件系统)中对文件/目录的任何修改,无论是手工修改还是 容器在运行过程中的修改,在该容器丢失或被删除后这些修改将全部丢失。即这些修改是无 法保存下来的。若要保存下来这些修改,通常有两种方式: 定制镜像持久化:将这个修改过的容器

    2024年01月23日
    浏览(48)
  • docker (五)-docker存储-数据持久化

    将数据存储在容器中,一旦容器被删除,数据也会被删除。同时也会使容器变得越来越大,不方便恢复和迁移。 将数据存储到容器之外,这样删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个容器,将数据挂载到容器里,就可以快速的恢复。 volume 卷 卷存储在

    2024年02月20日
    浏览(37)
  • Docker啥是数据持久化?

    ​ 在容器层的 UnionFS(联合文件系统)中对文件/目录的任何修改,无论是手工修改还是容器在运行过程中的修改,在该容器丢失或被删除后这些修改将全部丢失。即这些修改是无法保存下来的。若要保存下来这些修改,通常有两种方式: 定制镜像持久化:将这个修改过的容

    2024年02月15日
    浏览(30)
  • Docker 数据持久化方案详解

    目录 一、Docker数据持久化概述 1.1联合文件系统 1.2容器的数据卷 1.2.1 什么是数据卷 1.2.2 数据卷特点 1.2.3 Docker提供三种方式将数据从宿主机挂载到容器 二、 Docker持久化方案 2.1 查看volume 基本命令使用方法 2.2 volume持久化方案 2.2.1volume简介 2.2.2.volume特点 2.2.3 挂载指定volume 2.

    2024年02月07日
    浏览(38)
  • 【Docker】Docker 部署 Mysql 并设置数据持久化

    我们使用Docker的目的就是图它方便下载部署,不用常规的经历下载、配置、安装等等繁琐的步骤。但是与此同时Docker也存在一些缺点,像删除容器后数据就都没有了。很显然,不能持久化对于需要数据持久化的MySQL数据库来说是不能接受的,那有没有方式可以解决。 有,通过

    2024年02月10日
    浏览(23)
  • Docker学习路线5:在 Docker 中实现数据持久化

    Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离。默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据,Docker 提供了各种数据持久化方法。 Docker 卷 绑定挂载 Docker tmpfs

    2024年02月16日
    浏览(31)
  • docker安装redis并持久化数据

    这里是没有任何的密码 密码是刚才设置的Maqiang

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包