容器数据

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 容器中的文件系统是由分层文件系统提供的,包含只读层(镜像)和可读可写层(容器运行时层),这些都是被封装在容器内部的。如果用户需要将主机上的文件系统共享给容器使用,那怎么办呢?本文选自《Docker容器实战:原理、架构与应用》,将向您介绍使用数据卷与数据容器两种方式进行共享。

数据卷

  数据卷提供了一种主机和容器共享数据的方式,有些时候需要用它来做持久化和数据共享。当做持久化时,通常数据卷都会比较大,可以将其放在单独的磁盘、卷或者阵列上,这个时候容器只是一个执行环境。当做数据共享时,可以用于开发和测试分布式系统,如需要用到共享盘、处理fencing 等。数据卷主要通过-v 参数来指定。

1 创建一个数据卷

  若需要一个外部卷来存放持久化数据,而不想把数据包含在容器内部。例如:

root@ghostcloud:~# docker run -d -P --name datatest -v /webapp ubuntu
13ffee3a3f50d07fd5a737aaf2efc60ceec28e2b04c5d534cfd84d8b70019c11

  这条命令创建了一个名为datatest 的容器,同时为其创建了一个/webapp 的数据卷,这是数据卷在其内部的位置。那么它在主机上的什么位置呢?

root@ghostcloud:~# docker inspect 13ff
...
"Mounts": [
{
"Name":
"ec1c427a6a76be4918d6e8bac3247e2836dc8f424c9e06466fcf1baab-6e7ee79","Source":
"/var/lib/docker/volumes/ec1c427a6a76be4918d6e8bac3247e2836dc8f424c9e06466fcf1baab6e7ee79/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
...

  它的位置在/var/lib/docker 下。

2 映射一个外部卷

  如果以-v src:des 的方式指定,那么容器则会直接将宿主机的目录挂载到容器内部:

root@ghostcloud:~# docker run -it -v /root:/hostroot ubuntu
root@86ea1246ae5d:/# ls /hostroot
Dockerfile composetest gcagent myimage uninstall_agent.sh

  将宿主机/root 目录映射到了容器/hostroot 目录中。此时,用户可以在容器中对宿主机/root 目录中的文件进行修改,但这种操作是非常危险的。在做数据卷映射时,一定要特别小心,任何时候都不要将宿主机的根目录映射到容器内部。

使用数据型容器

  由于容器本身就可以包含文件系统,那么可不可以把容器的卷分享给另一个容器用呢?答案是可以的。具体的步骤如下。
(1)创建一个包含外部卷的容器,注意是create,并不是run。run 是create 后再start,本例只需要容器的文件系统,所以只需要create.

root@ghostcloud:~# docker create -v /dbdata --name dbstore ubuntu
d95cdc1139ed1011fe51843f524c377cd7497629e9a4434508f422f15b61a03c

(2)在另一个容器中通过--volumes-from 来映射。

root@ghostcloud:~# docker run --rm -it --volumes-from dbstore ubuntu
root@4b61bb181471:/# df -h
Filesystem          Size Used Avail Use% Mounted on
None                 8.8G 4.2G 4.2G 50% /
tmpfs                2.0G 0 2.0G 0% /dev
tmpfs                2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/disk/by-uuid/27d8b1c5-4bfc-4499-94d6-6e5f5c42e923 8.8G 4.2G 4.2G 50%/dbdata

备份、还原和迁移数据卷

  下面是通过容器型数据卷和数据卷联合使用做备份的例子。

$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf
/backup/backup.tar /dbdata

  剖析:

  • volumes-from 表示使用dbstore 这个容器的数据卷;
  • v $(pwd):/backup 表示将当前路径映射到容器的/backup 中,用于后续备份;
  • ubuntu tar cvf /backup/backup.tar /dbdata 表示将/dbdata 的内容备份到当前目录。

上面这个例子就是典型的将容器作为一个工具来使用的例子,如果更进一步,用户可以自己写一个Dockerfile,然后产生一个Image,将参数都指定好,以后只需启动容器就可备份,备份完成后又自动退出。
那么还原呢?

$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd/dbdata && tar xvf /backup/backup.tar --strip 1"

  类似地,通过tar 来解压即可。

容器和代码进行关联

  数据卷有下面几个特点:

  • 数据卷在容器创建时进行初始化;
  • 数据卷既可以共享,也可以在容器之间重用;
  • 对于数据卷的读写是直接下发的;
  • Commit 命令不会将改动保存到镜像中;

即使容器被删除了,数据卷仍然存在,因此这一块需要特别注意,避免产生垃圾数据卷。

   本文选自《Docker容器实战:原理、架构与应用》,点此链接可在博文视点官网查看此书。
                      图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       图片描述

相关文章
|
3天前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
19 1
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
3天前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
18 1
|
3月前
|
存储 索引 Python
Python基础第五篇(Python数据容器)
Python基础第五篇(Python数据容器)
|
3天前
|
XML 移动开发 JSON
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
本文介绍了Twaver HTML5中的数据容器(DataBox),包括如何进行增删查改操作、遍历数据容器以及判断网元是否存在于数据容器中。DataBox用于管理所有的网元对象,如ElementBox、LayerBox、AlarmBox等,并通过示例代码展示了其常用方法的使用。
15 1
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
|
1月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
1月前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
2月前
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
271 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
28天前
|
监控 安全 网络安全
|
1月前
|
域名解析 Kubernetes 负载均衡
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
|
2月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
44 5