doker学习4---docker容器数据卷

本文介绍了Docker容器数据卷的概念、作用及如何添加和管理数据卷。数据卷是Docker中用于持久化数据的机制,不受容器生命周期影响,可以在容器间共享。通过命令行或Dockerfile可以创建和挂载数据卷,实现容器与宿主机之间的数据同步。即使容器停止,数据卷仍可保持数据,确保数据持久化。
摘要由CSDN通过智能技术生成

doker学习4—docker容器数据卷

一、Docker容器数据卷是什么?

先来看看Docker的理念:

  • 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
  • 容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,

那么当容器删除后,数据自然也就没有了。

为了能保存数据在docker中我们使用卷。

二、docker容器数据卷的作用

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

容器数据卷的特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

三、数据卷

数据卷在容器内的添加。可以通过直接命令添加,也可以通过DockerFile进行添加。

1、通过命令直接添加

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

在这里插入图片描述

2、查看数据卷是否挂载成功

查看容器内部详细信息:docker inspect 容器ID

3、容器和宿主机之间的数据共享

如图所示,我们在容器的目录底下创建或者修改的文件会同步到宿主机目录下,宿主机目录下修改或者创建的文件夹也一样会同步到容器内目录下:
在这里插入图片描述

由此可以看出,数据卷可以实现容器和宿主机之间数据共享。

4、容器停止退出后,宿主机进行数据修改,查看数据是否同步

在这里插入图片描述

可以看到,容器停止退出后,宿主机进行数据修改,查看数据是可以进行同步的。

5、通过DockerFile添加数据卷

​ 1、首先我们需要在宿主机目录下创建一个mydocker文件夹,在文件夹下创建一个dockerfile文件。在dockerfile中,可以使用VOLUME指令来给镜像添加一个或多个数据卷,如:

VOLUME ["/docker1","/docker2","/docker3"]

需要注意的是在dockerfile文件中使用该指令来给镜像添加数据卷时,切记VOLUME 和[]中是需要空一格的。

出于可移植和分享的考虑,用-v主机目录:容器目录这种方法不能够直接在Dockerfile中实现。用于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
2、编写dockerfile,将以下内容写入dockerfile,即:

# volume test
FROM centos
VOLUME ["/docker1","/docker2"]
CMD echo "finished,--------success1"
CMD /bin/bash

​ 3、通过编写的dockerfile构建一个新的镜像:

docker build -f /root/mydocker/dockerfile -t centos .     //注意命令末尾是有一个.的。

​ 4、运行通过dockerfile构建的镜像
  如下图所示:以交互式模式启动通过dockerfile build的容器,在容器内部可以查看到在dockerfile中给镜像添加的数据卷,即VOLUME [“/docker1”,“docker2”]中的值。

在这里插入图片描述

​ 5 、通过上述步骤,可以明确知道在容器内的数据卷目录所在,此时我们可以通过docker inspcet IMAGE命令来查看宿主机中的卷的目录,

好的,关于 Docker 数据的进阶篇,我可以为你提供以下内容: 1. 数据的类型 Docker 数据有三种类型:主机挂载、匿名、命名。其中,主机挂载是将主机上的目录挂载到容器中;匿名是在容器内部创建的临时;命名则是给起一个名字,并将其保存在 Docker 数据存储区中。 2. 数据的备份与恢复 我们可以使用 Docker Compose 中的 `docker-compose.yml` 文件来定义数据的备份和恢复。具体方法是,在 `volumes` 字段中定义及其备份路径,然后在 `services` 字段中指定容器和对应的名称。 例如: ``` version: "3" services: db: image: mysql volumes: - db_data:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password backup: image: backup volumes: - /path/to/backup:/backup - db_data:/data/db command: backup.sh volumes: db_data: ``` 以上代码中,我们定义了一个 `db` 服务和一个 `backup` 服务。其中,`db` 服务使用了名为 `db_data` 的命名,并挂载到容器的 `/var/lib/mysql` 目录中;`backup` 服务则使用了两个,一个是挂载到宿主机上的 `/path/to/backup` 目录,用于保存备份文件;另一个是使用了 `db_data` 命名,并挂载到容器的 `/data/db` 目录中,用于备份数据。最后,我们在 `backup` 服务中执行了备份脚本 `backup.sh`。 3. 数据的共享 我们可以将一个数据挂载到多个容器中,实现数据的共享。例如,我们可以将一个命名挂载到 `web` 和 `db` 两个服务中,这样它们就可以共享数据了。 ``` version: "3" services: web: image: nginx volumes: - web_data:/usr/share/nginx/html db: image: mysql volumes: - db_data:/var/lib/mysql - web_data:/var/www/html volumes: db_data: web_data: ``` 以上代码中,我们定义了一个 `web` 服务和一个 `db` 服务。其中,`web` 服务使用了名为 `web_data` 的命名,挂载到容器的 `/usr/share/nginx/html` 目录中;`db` 服务则使用了 `db_data` 和 `web_data` 两个,分别挂载到容器的 `/var/lib/mysql` 和 `/var/www/html` 目录中,实现了数据的共享。 希望以上内容能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值