打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
docker容器与宿主机的数据交互
在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。
方式一、Docker cp命令
docker cp :用于容器与主机之间的数据拷贝。语法# 容器内文件 copy to 宿主机docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-# 宿主机文件 copy to 容器内docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATHOPTIONS说明:-L :保持源目标中的链接
操作示例:
宿主机到容器
容器到宿主机
注:此方式虽然他也可以管理但是数据不交融,基本不会使用,仅做了解
方式二、Docker数据卷
1. 什么是volume
想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层以及在顶部的读写层的组合被称为Union FIle System(联合文件系统)。
为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。
2. 数据卷的特性
· 数据卷 可以在容器之间共享和重用
· 对数据卷的修改会立马生效
· 对数据卷的更新,不会影响镜像
· 数据卷 默认会一直存在,即使容器被删除
3. 数据卷相关操作
Usage:  docker volume COMMANDManage volumesCommands:  create      Create a volume  inspect     Display detailed information on one or more volumes  ls          List volumes  prune       Remove all unused local volumes  rm          Remove one or more volumes
创建数据卷
Usage:  docker volume create [OPTIONS] [VOLUME]Create a volumeOptions:  -d, --driver string   Specify volume driver name (default "local")      --label list      Set metadata for a volume  -o, --opt map         Set driver specific options (default map[])
查看所有数据卷
Usage:  docker volume ls [OPTIONS]List volumesAliases:  ls, listOptions:  -f, --filter filter   Provide filter values (e.g. 'dangling=true')      --format string   Pretty-print volumes using a Go template  -q, --quiet           Only display volume names
查看单一或多个数据卷详情
Usage:  docker volume inspect [OPTIONS] VOLUME [VOLUME...]Display detailed information on one or more volumesOptions:  -f, --format string   Format the output using the given Go template
删除单一数据卷
Usage:  docker volume rm [OPTIONS] VOLUME [VOLUME...]Remove one or more volumes. You cannot remove a volume that is in use by a container.Aliases:  rm, removeOptions:  -f, --force   Force the removal of one or more volumes
删除所有闲置数据卷
Usage:  docker volume prune [OPTIONS]Remove all unused local volumesOptions:      --filter filter   Provide filter values (e.g. 'label=<label>')  -f, --force           Do not prompt for confirmation
操作示例:
4. 数据卷使用
数据卷的使用,类似于 Linux 下对目录或文件进行 mount。
用户可以通过docker run的--volume/-v或--mount选项来创建带有数据卷的容器
官方文档说明连接:https://www.xiaoyuani.com/
4.1 --volume使用详述
参数--volume(或简写为-v)只能创建bind mount。示例:
docker run --name $CONTAINER_NAME -it \-v $PWD/$CONTAINER_NAME/app:/app:rw \-v $PWD/$CONTAINER_NAME/data:/data:ro avocado-cloud:latest /bin/bash
注释:
· 命令格式:[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]
· 如果指定HOST-DIR则必须是绝对路径,如果路径不存在则会自动创建
· 实例中的rw为读写,ro为只读
如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。
4.2 --mount 使用详述
对于--moun选项,目前Docker提供了三种不同类型的数据卷从宿主机挂载到容器中:
(1)volume:普通数据卷(默认即这种类型),Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;
(2)bind mount:绑定数据卷,意为着可以存储在宿主机系统的任意位置;
*注意:Dockerfile 中不支持这种用法,这是因为 Dockerfile 是为了移植和分享用的。然而,不同操作系统的路径格式不一样,所以目前还不能支持。
(3)tmpfs:临时数据卷,挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;
三种方式的示意图如下所示:
4.3 -v与-mount的区别
-mount可以支持创建集群服务的数据卷,而-v不行。
4.4 补充说明
(1)Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。
(2)(--mount基本包含了--volume的可选属性内容)官方建议使用--mount的方式,原文如下:
Even though there is no plan to deprecate --volume, usage of --mount is recommended.
方式三、Docker数据卷容器
数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载,如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
docker将数据从宿主机挂载到容器的方式(一)
Docker 持久存储介绍(十三)
容器(六)Data Volume 之 bind mount【34】
Docker学习笔记——Volume的创建
docker学习5
Docker 数据持久化Volume
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服