Docker 容器数据卷 和 数据卷容器

以下是关于 Docker 容器数据卷数据卷容器 的详细总结:


第一部分:Docker 容器的数据卷

1. 什么是 Docker 数据卷?

  • 数据卷 是一个特殊设计的目录,可以绕过 Docker 的联合文件系统(UFS)。
  • 目的是用于数据的 永久存储,且完全独立于容器的生命周期。
  • 重要特点
    1. 数据卷的生命周期独立于容器,容器删除时,数据卷不会被删除。
    2. 数据卷可以在多个容器之间共享和重用。
    3. 它允许直接修改,而不会影响镜像的更新。
    4. 数据卷的变化不会被记录到镜像中。
    5. 挂载数据卷的容器被删除后,数据卷依然存在。

2. 数据卷的特点

以下是数据卷的几个关键特点:

  1. 数据卷在容器启动时会被初始化。
    • 如果镜像在挂载点包含数据,则这些数据会被拷贝到新创建的卷中。
  2. 数据卷可以在多个容器间共享和重用。
  3. 容器可以直接修改数据卷中的内容。
  4. 数据卷的变化不会影响镜像。
  5. 即使容器被删除,数据卷依然存在,不会被自动清理。

3. 数据卷的使用方法

3.1 使用 -v 挂载数据卷

通过 docker run 命令使用 -v 参数挂载数据卷:

docker run -it --name my-container -v /host/data:/container/data ubuntu
  • 命令解析
    • -v /host/data:/container/data:将宿主机的 /host/data 目录挂载到容器的 /container/data 目录中。
    • ubuntu:使用 Ubuntu 镜像运行容器。
    • my-container:容器名称。

3.2 挂载后的效果

  1. 宿主机中 /host/data 的内容会同步到容器的 /container/data 目录。
  2. 容器中 /container/data 的修改会反映到宿主机的 /host/data 中。
  3. 容器删除后,宿主机的 /host/data 内容仍然保留。

3.3 添加只读权限

为了保护数据卷的内容,可以设置只读权限:

docker run -it --name readonly-container -v /host/data:/container/data:ro ubuntu
  • :ro 表示数据卷以只读模式挂载。
  • 在容器内 /container/data 中无法创建或修改文件,但可以在宿主机的 /host/data 中进行操作,容器内会实时同步。

3.4 挂载多个数据卷

如果需要挂载多个数据卷,可以重复使用 -v 参数:

docker run -it --name multi-volume-container \
-v /data1:/data1 \
-v /data2:/data2 \
ubuntu

4. 使用 Dockerfile 定义数据卷

在 Dockerfile 中,可以通过 VOLUME 指令定义数据卷:

FROM ubuntu:22.04
VOLUME ["/data1","/data2"]
RUN apt-get update && apt-get install -y \
wget \
curl \
proxychains
CMD ["bash"]

构建镜像并运行容器

  1. 构建镜像:
    docker build -t volume-image .
  2. 基于镜像启动容器:
    docker run -it --name volume-container volume-image

效果

  1. 在容器启动后,会自动创建 /data1/data2 目录作为数据卷。
  2. 若未显式指定宿主机目录,Docker 会自动为这些数据卷分配存储路径。

5. 数据卷的实际应用场景

  • 数据持久化:
    • 容器删除后,数据依然保留。
  • 多容器共享数据:
    • 数据卷可以在多个容器之间共享(如数据库和应用容器之间的连接)。
  • 备份和恢复:
    • 数据卷可以轻松实现数据的备份和恢复。
  • 分布式存储:
    • 数据卷可以挂载分布式存储系统(如 NFS、Ceph 或 GlusterFS)以实现高可用性。

测试过程:

docker build -t ubuntu-2004-2 .
docker run -it --name ubuntu-2004-test2 ubuntu-2004-2
即使你没有显式绑定宿主机目录,Docker 也会自动创建并管理这些数据卷。运行以下命令可以查看宿主机对应的数据卷路径:
在宿主机上运行以下命令:
docker inspect ubuntu-2004-test2

image


第二部分:Docker 数据卷容器

1. 什么是数据卷容器?

  • 数据卷容器是一个专门用于保存和管理数据卷的容器。
  • 它的主要目的是将数据卷与应用容器解耦,使得数据管理更加集中和统一。

2. 创建数据卷容器

使用以下命令创建一个数据卷容器:

docker create -v /data1 --name data-container ubuntu
  • 命令解释
    • -v /data1:定义一个数据卷 /data1
    • --name data-container:为数据卷容器命名。
    • ubuntu:使用的基础镜像。

3. 使用数据卷容器

将数据卷容器挂载到应用容器中,实现数据共享:

docker run -it --name app-container --volumes-from data-container ubuntu
  • --volumes-from
    • 表示应用容器 app-container 将挂载 data-container 中的数据卷 /data1

测试验证过程:

创建数据容器
docker create -v data2404 --name ubuntu2404-3 ubuntu:24.04
使用数据卷容器
docker run -it --name ubuntu2404-4-shujujuan --volumes-from ubuntu2404-3 ubuntu:24.04

image
image
image
image


4. 数据卷容器的优点

  1. 数据管理集中:
    • 所有数据存储集中在数据卷容器中,容易备份和管理。
  2. 应用与数据分离:
    • 应用容器和数据容器解耦后,可以独立更新或替换应用容器,而不会影响数据。
  3. 共享和重用:
    • 多个应用容器可以通过挂载同一个数据卷容器实现数据共享。

5. 示例:数据卷容器的使用

步骤 1:创建数据卷容器

docker create -v /shared-data --name shared-data-container ubuntu

步骤 2:挂载数据卷容器到多个应用容器

docker run -it --name app1 --volumes-from shared-data-container ubuntu
docker run -it --name app2 --volumes-from shared-data-container ubuntu

效果

  1. app1app2 容器都可以访问 /shared-data 数据卷。
  2. 在任何一个容器中修改 /shared-data 的文件,另一个容器可以立刻看到。

6. 数据备份与恢复

备份数据卷容器

将数据卷容器中的数据备份到宿主机:

docker run --rm --volumes-from shared-data-container \
-v $(pwd):/backup ubuntu \
tar cvf /backup/backup.tar /shared-data
  • 备份数据卷容器的 /shared-data 到宿主机的 backup.tar 文件。

恢复数据

从备份文件恢复数据到新容器:

docker run --rm --volumes-from new-data-container \
-v $(pwd):/backup ubuntu \
tar xvf /backup/backup.tar -C /

总结

  1. Docker 数据卷

    • 用于持久化存储数据,支持容器间共享,独立于容器生命周期。
    • 应用场景包括数据持久化、服务解耦、备份与恢复。
  2. Docker 数据卷容器

    • 是一种特殊的容器,用于集中管理数据卷。
    • 它使多个应用容器的数据共享和分离更加灵活。
  3. 实践建议

    • 理解数据卷和数据卷容器的区别,选择合适的方式应用到实际项目中。
    • 结合分布式存储(如 NFS 或 Ceph),实现数据的高可用性和可靠性。

如果仍有疑问,请随时提问!

posted @   皇帽讲绿帽带法技巧  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示