前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >06. 管理Docker容器数据

06. 管理Docker容器数据

作者头像
有一只柴犬
发布于 2024-01-25 02:58:55
发布于 2024-01-25 02:58:55
14600
代码可运行
举报
文章被收录于专栏:DockerDockerJAVA体系
运行总次数:0
代码可运行

1、前言

在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在 Docker 的容器被删除后,并不会保留容器的状态信息。那么如何实现信息的持久化呢?这必然涉及容器的数据管理

2、Docker实现数据管理的方式

在 Docker 容器中实现数据管理(或者说实现数据的持久化)主要有以下两种方式:

2.1、数据卷(Data Volumes)

数据卷本质上是一个挂载目录,类似使用 Linux的 mount 命令挂载的目录。数据卷可以供容器使用,并且可以在不同的容器之间共享和重用数据卷。对数据卷的修改会立即生效。数据卷与容器彼此独立,对数据卷的更新不会影响镜像。

即使容器被删除,数据卷默认也会一直存在,直到数据卷被删除为止。

在Docker 中可以使用-mount和-v 两种方式给容器挂载数据卷。

2.2、数据卷容器(Data Volume Containers)

数据卷容器是一种特殊的容器,用来维护数据卷。它可以在多个容器之间共享数据信息。利用数据卷容器可以很方便地完成数据迁移

3、简单示例

3.1、数据卷示例

可以使用-mount或-v两种方式给容器挂在数据卷。

-mount和-v的区别在于,-mount如果宿主机目录不存在会直接报错,而-v会自动创建。

1)创建一个数据卷“myvolume”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume create myvolume

创建后,查看所有数据卷。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume ls

也可以通过inspect命令查看数据卷详细信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker inspect myvolume

2)启动一个容器,并使用数据卷。

这里使用Nginx镜像创建一个容器,名称为mynginx,端口映射为1234:80。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -p 1234:80 --name=mynginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html/ nginx

然而我这里却提示无法识别--mount,通过docker run --help并没有发现--mount命令。猜测跟docker版本有关系,我这里使用的是docker 1.13.0版本。网上找了一圈之后发现,需要docker-ce 75.06以上版本才可以。这里大家可以自行验证。

参数说明:

  1. --mount :指定在容器启动时挂载数据卷。
  2. type:指定数据卷挂载的方式。有以下几个参数:
    1. volume。普通数据卷,默认的type类型。其函数映射到主机“ar/lib/docker/volumes”目录下。
    2. bind。绑定数据卷。使用这种类型可以在挂载数据卷时将其映射到主机的指定目录下。
    3. tmpfs。临时数据卷,只将容器的目录挂载到宿主机的内存中。一般在实际环境中不会使用这种方式。
  3. source:指定宿主机上的目录或者数据卷。这里使用的是第(1)步所创建的数据卷myvolume。
  4. target:将容器中的“/usr/share/nginx/htm/”目录挂载到宿主机。

3)也可以使用-v参数进行挂载。

使用-v我们将宿主机/home/data目录挂载到容器内的/data/mydatavolume目录下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# --privileged=true 不加这个,容器内使用ls会提示权限问题
docker run -it --privileged=true -v /home/data/:/data/mydatavolume centos /bin/bash

容器内:

宿主机:

可以看到目录已经成功挂载,且当你在宿主机修改的内容,会直接同步到容器内部。

-v命令格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-v 宿主机目录:容器内部目录

3.2、数据卷容器示例

数据卷容器也是一个容器,专门用来提供数据卷供其他容器挂载。如果用户需要在多个容器之间共享一些持续更新的数据,则最简单的方式是使用数据卷容器。

1)创建数据卷容器。

创建一个数据卷容器 dbdata,并在其中创建一个数据卷挂载到“/dbdata”下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -v /dbdata --name dbdata centos

2)数据卷容器内生成一些文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo hello world > a.txt

3)创建一个容器container1,并使用--volumes-from挂载dbdata容器的数据卷。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it --volumes-from dbdata --name=container1 centos

在容器container1中可以查看目录/dbdata,其中已经有了刚生成的a.txt:

4)同理可以继续建容器container2,并使用--volumes-from挂载dbdata容器的数据卷。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it --volumes-from dbdata --name=container2 centos

并创建b.txt:

5)在容器container1中也能看到该数据。

从结果可以看出两个容器container1和container2挂载了同一个数据卷,并且数据卷都在相同的、dbdata目录下。这样容器的任何一方在该目录下写入,其他容器也都可以看到。这样很方便的实现了不同容器之间的数据共享,并且利用这种方式很容易的实现容器数据的迁移。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
06. 管理Docker容器数据
在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在 Docker 的容器被删除后,并不会保留容器的状态信息。那么如何实现信息的持久化呢?这必然涉及容器的数据管理。
有一只柴犬
2024/01/23
1570
06. 管理Docker容器数据
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,一方面,往往需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在Docker的容器被删除销毁后,并不保留容器状态的信息。那么如何实现信息的持久化操作呢?这必然涉及容器的数据管理操作和数据的持久化。
赵渝强老师
2024/08/13
1140
【赵渝强老师】Docker的数据持久化
docker数据管理
用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及到容器的数据管理操作。
yuezhimi
2020/09/30
7410
Docker 学习笔记-数据管理
我们在使用 docker 的时候会将一些数据(例如网站文件、配置文件、数据库文件等)存储在容器中。这样存在一个严重的问题,如果容器出现损坏(例如无法启动,被删除等)那么存储在容器中的数据就会丢失,即使我们进行了容器备份,数据也不可能恢复到故障发生时。如果要解决这个问题,我们就需要用到 docker 的数据管理。在 docker 中数据管理一共有两种方式,分别是数据卷和数据卷容器,下面我们来一一讲解。
喵叔
2020/09/08
4960
​Docker数据管理
在前面我们详细学习了docker的三大核心概念:镜像、容器和仓库,接下来开始学习如何管理数据。在实际工作中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,此时必然会使用到容器数据管理的各种操作。
啃饼思录
2020/12/29
1.3K0
​Docker数据管理
Docker 入门到实战教程(六)Docker数据卷
一. 前言 上一篇介绍到如何构建镜像以及镜像管理,不知道大家学到现在有没有疑问?比如我运行web服务产生的日志,我如何在宿主机上看到?我想安装mysql或者redis等,配置文件如何配置,可以进到容器
小东啊
2020/07/23
1.5K0
Docker 入门到实战教程(六)Docker数据卷
【docker深入浅出】一文学透Docker基础万字好文
Docker 最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并与2013年3月以Apache 2.0授权协议开源),主要项目代码在GitHub上进行维护。Docker项目后来还加入了Linux基金会,并成立推动开放容器联盟。
iOS Magician
2023/10/11
5400
【docker深入浅出】一文学透Docker基础万字好文
Docker存储卷
Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
Alone-林
2022/08/23
8000
Docker存储卷
容器中的数据管理
本节学习的内容是如何管理容器中的数据以及容器之间的数据,我们将要学习如下两个主要方式:
字母哥博客
2020/09/23
8150
拒绝删库跑路!上手 Docker 容器数据管理
数据是一切应用和服务的核心,特别是目睹了一次次“删库跑路”引发的惨剧之后,我们更能深入体会到数据存储与备份的重要性。Docker 也为我们提供了方便且强大的方式去处理容器的数据。在这一篇文章中,我们将带你通过理论和实战的方式掌握 Docker 的两种常用的数据管理方式:数据卷(Volume)和绑定挂载(Bind Mount),从而能够游刃有余地处理好数据,为你的应用提供强有力的支撑和保障。
一只图雀
2020/04/07
6400
Docker如何管理数据
http://os.51cto.com/art/201406/443516.htm 到目前我们介绍了一些Docker的基础概念, 知道了如何使用Docker的p_w_picpath, 也知道了如何在多个container间通过网络通讯. 在这章里我们将介绍如何在docker的container内管理数据以及如何在不同的container间共享数据。 我们将介绍两种主要的在docker中管理数据的方法: Data volumes Data volume container Data volumes 一个 data volume 就是一个在一个或者多个container里的特殊用途的目录。它绕过了 Union File System (译者: 这里不确定, 需要研究)为持久化数据、共享数据提供了下面这一些有用的特性: Data volumes 可以在不同的container之间共享和重用数据 对 Data volume 的修改及时生效(译者:data volumn是一个目录, 多个container都挂载这个目录, 具体的可以通过 docker inspect 看 volumne的信息) 对 data volume 修改内容在升级p_w_picpath的时候不会被包括进去 (译者:在docker的整个设计中p_w_picpath是一个无状态的, 这样对升级重用非常有利。而标记状态的数据, 比如数据库的数据, 生产的log之类的应该放到volume里。volume的持久化和恢复在下面有介绍, 是通过文件的形式的, 而不是通过p_w_picpath) Volumes 的持久化直到没有container使用他们 添加数据卷 你可以在docker run 的时候使用 -v 来添加一个 data volume。这个参数在docker run 的时候可以多次使用来添加多个 data volumes。让我们为我们的web application container挂载一个 volume。 $ sudo docker run -d -P --name web -v /webapp training/webapp python app.py 这里一个新的volume会创建到container里的 /webapp. (译者:如果你通过ssh或者通过 -i 登陆到你的container的一个shell里, 使用 ls /webapp 可以验证挂载成功了) 注意: 你也可以在Dockerfile里添加 VOLUME 字段,这样在创建一个新的p_w_picpath的 container是就会自动的创建新的volume. 安装一个目录作为数据卷 使用 -v 不仅能创建一个新的 volume, 还可以把宿主机一个目录mount到container里。 $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 这条命令会把本地目录 /src/webapp mount到container里的 /opt/webapp 目录上。用这个方法来测试程序非常 方便, 比如我们可以把我们的源代码通过这个方法mount到container里, 修改本地代码后立即就可以看到修改后的代码是如何在container里工作的了。宿主机的目录必须是绝对路径, 如果这个目录不存在docker会为你自动创建。 注意 这里是没法用 Dockerfile实现的, 因为这样的用法有悖于可移植性和共享. 因为本地目录就像他名字告诉我们的, 是和本地相关的, 不一定可以在所有的宿主机上工作.(译者: 鬼知道你在使用p_w_picpath的时候的host是啥样子的) Docker默认设置volume是可读写的,但是我们也可以mount一个目录为只读: $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py 这里我们同样mount了 /src/webapp 目录, 但是我们加上了 ro 参数, 告诉docker这个volume是只读的. 创建并安装数据卷容器 如果你有一些持久化的数据, 并且想在不同的container之间共享这些数据, 或者想在一些没有持久化的container中使用, 最好的方法就是使用 Data Volumn Container, 在把数据mount到你的container里.(译者:如开篇译者提到的docker的container是无状态的, 也就是说标记状态的数据,例如:数据库数据, 应用程序的log 等等, 是不应该放到container里的, 而是放到 Data Volume Container里, 这点和f
DevinGeng
2019/04/09
1.1K0
docker容器技术系列六:docker容器的数据管理
刚接触docker时总在思考两个问题: 1、docker容器如何实现将数据持久化呢?比如一个httpd容器中用户上传的文件或者访问日志等! 2、如何实现便捷的更新容器中的文件呢? 比如需要快捷的更新容器中的程序,总不能每次更新都build一次镜像吧! 那下面我们就来聊聊docker容器的数据管理:数据卷。 docker提供了两种方式实现数据管理: 1、映射宿主机目录或文件 2、通过创建一个专用的数据卷容器与相关容器间共享数据并实现持久化 一、数据卷的基本概念 数据卷是一个可供一个或多个容器使用的特殊目录,它
小小科
2018/05/04
8370
docker容器技术系列六:docker容器的数据管理
《Docker极简教程》--Docker卷和数据持久化--Docker卷的使用
创建 Docker 卷是在 Docker 中管理持久化数据的重要步骤之一。通过 Docker 卷,可以将数据与容器解耦,实现数据的持久化存储,并且可以在容器之间共享数据。以下是创建 Docker 卷使用 docker volume create 命令创建卷
喵叔
2024/05/24
1880
Docker 容器的数据管理
docker的理念之一就是将应用和运行的环境打包,因此docker容器的生存周期通常都是与在容器中运行的程序相同的,而我们对数据的要求是持久化,docker容器之间也需要一个共享数据的渠道。这些需求就催生了docker数据卷的诞生。
程序员果果
2019/05/28
5620
《Netkiller Virtualization 手札》Docker 卷管理
本文节选择《Netkiller Virtualization 手札》Docker 卷管理 1.5. 卷管理 1.5.1. 列出卷 docker volume ls # docker volume ls DRIVER VOLUME NAME local dbac41b6de88c75d2932d5949367b17f347f482977d508195375dbc71518ab27 1.5.2. 创建卷 # docker volume create -
netkiller old
2018/03/05
7230
【Docker】:Docker 数据管理 - Volumes & Bind Mounts
This will download and start a GitLab container and publish ports needed to access SSH, HTTP and HTTPS. All GitLab data will be stored as subdirectories of GITLAB_HOME. The container will automatically restart after a system reboot. (译:所有 GitLab 的数据都会被存储到宿主机 GITLAB_HOME 的子目录中)
WEBJ2EE
2022/01/04
1.5K0
【Docker】:Docker 数据管理 - Volumes & Bind Mounts
Docker容器卷的基础概念
Docker 是目前流行的一种容器化技术,通过容器隔离应用程序的运行环境,从而实现了应用程序的轻便、快速、可复制、可移植等优点。在 Docker 中,容器卷是一个重要的概念,它可以支持数据的持久化存储、容器之间的数据共享等功能,本文将详细讲解 Docker 容器卷的基础概念。
网络技术联盟站
2023/06/05
3110
03 . Docker数据资源管理与网络
第三种情况 (我们只设置了memory限制时300M,swap没有指定,默认被设置为与memory一样的值。memory+swap一共是600M)
iginkgo18
2020/09/27
5890
005.Docker存储管理
因为Docker 采用 AFUS 分层文件系统时,文件系统的改动都是发生在最上面的容器层,在容器的生命周期内,它是持续的,包括容器在被停止后。但是,当容器被删除后,该数据层也随之被删除了。因此,Docker 采用 volume (卷)的形式来向容器提供持久化存储。Docker volume 有如下几种形态。
木二
2019/07/26
8780
Docker系列教程14-Docker数据持久化
容器中数据持久化主要有两种方式: 数据卷(Data Volumes) 数据卷容器(Data Volumes Dontainers) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,可以绕过UFS(Unix File System)。 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据卷默认会一直存在,即使容器被删除 一个容器可以挂载多个数据卷 注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount。 创建数据卷 示例: docker run -
用户1516716
2018/04/03
9120
相关推荐
06. 管理Docker容器数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验