Docker基础之九: 管理容器的数据

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 管理容器的数据 到目前为止,我们已经介绍了Docker的一些基本概念,如:容器的操作,镜像的操作和网络的操作等。在本节,我们将介绍如何管理容器内部的数据,以及容器间的数据交互。我们将介绍如何创建: 数据卷 数据型容器 1 数据卷 数据卷是一个经过特殊设计的文件夹,提供给容器使用。数据卷并不

管理容器的数据

对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。

到目前为止,我们已经介绍了Docker的一些基本概念,如:容器的操作,镜像的操作和网络的操作等。在本节,我们将介绍如何管理容器内部的数据,以及容器间的数据交互。我们将介绍如何创建:

  • 数据卷
  • 数据型容器

1 数据卷

数据卷是一个经过特殊设计的文件夹,提供给容器使用。数据卷并不由UnionFS管理,因此数据卷可以用作持久化和数据分享,它具有以下特性:

  • 数据卷在容器创建的时候进行初始化。如果容器的镜像在特定的Mount点下有数据,那么已有的数据将被拷贝到指定目录。
  • 数据卷可以在容器间共享和复用
  • 对数据卷的改变是直接操作,不会回滚。
  • 当你更新镜像时,数据卷的改变不会被保存。
  • 即使容器被删除了,数据卷也不会丢失。

因此,数据卷是用来持久化数据的,跟容器本身的生命周期是无关的。Docker删除容器的时候,不会自动删除数据卷,因此当你使用数据卷的时候也要注意不要产生过多的垃圾数据。

2 添加数据卷

数据卷是通过-v来指定的,在docker create和docker run的时候可以使用多个-v参数,指定多个数据卷。

$ docker run -d -P --name web -v /webapp training/webapp python app.py

这条命令在创建容器时,会创建一个/webapp目录。 注意:我们也可以通过VOLUME指令在Dockerfile中指定需要Mount的数据卷。 默认情况下,数据卷是可读可写的,但是你也可以设置为只读:

$ docker run -d -P --name web -v /opt/webapp:ro training/webapp python app.py

3 定位卷的位置

$ docker inspect web
...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/webapp",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
]
...

其中source是文件系统在主机上的地址(注意这个地址是随机分配的,因此一定要注意垃圾回收),Destination是容器中的地址。

4 Mount本地文件夹作为数据卷

通过-v我们可以给容器添加一个随机的数据卷,但是这种卷是不好控制的,因此我们可以Mount一个本地文件夹作为数据卷。

$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

上面这条命令,我们将本地的/src/webapp映射到了容器的/opt/webapp目录。由于将主机的文件系统映射到了容器中,因此容器有了主机的完全访问权限,因此一定要注意安全。

5 Mount本地文件到容器中

-v参数除了可以Mount文件夹,还可以做文件的映射。比如:

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

这条命令,将把主机的~/.bash_histroy映射到容器中,因此主机和容器可以共享Bash命令的历史数据。如果将~/.bash_profile映射进去,那就可以共享Bash的配置。

6 数据型容器

如果你希望在容器间共享卷,那么就可以使用数据型容器。我们可以先创建一个命名容器:

$ docker create -v /dbdata --name dbdata ubuntu

接下来,我们通过--volumes-from选项来进行数据卷的复用:

$ docker run -it --volumes-from dbdata --name db1 ubuntu

然后再建一个容器:

$ docker run -it --volumes-from dbdata --name db2 ubuntu

之后我们就可以在db1和db2中同时对/dbdata进行操作了。

7 数据备份、还原和迁移

我们可以通过下面的命令进行数据备份:

$ docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
  • --volumes-from将把dbdata容器的数据卷Mount到当前容器;
  • -v 将当前目录映射到/backup目录
  • tar命令将/dbdata打包

接下来,我们可以对容器进行数据恢复:

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

通过上面的操作,我们就可以自动备份、还原和迁移数据了。

8 注意事项

由于数据卷的共享,会出现多个容器同时写一个卷的情况,因此可能会导致数据丢失,这里面一定要特别注意。可以采取一定的同步机制来保证数据的一致性。

目录
相关文章
|
2天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
18 6
|
2天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
13 5
|
2天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
19 3
|
2天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
13 2
|
7天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
33 5
|
8天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
23 1
|
4天前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
15 0
|
3月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
|
2月前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
|
3月前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
103 14