docker容器与宿主机的数据交互
source link: http://www.cnblogs.com/keh123000/p/13942587.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。
方式一、Docker cp命令
docker cp :用于容器与主机之间的数据拷贝。 语法 # 容器内文件 copy to 宿主机 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # 宿主机文件 copy to 容器内 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH OPTIONS说明: -L :保持源目标中的链接
操作示例:
宿主机到容器
容器到宿主机
注:此方式虽然他也可以管理但是数据不交融,基本不会使用,仅做了解
方式二、Docker数据卷
1. 什么是volume
想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层以及在顶部的读写层的组合被称为Union FIle System(联合文件系统)。
为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。
2. 数据卷的特性
• 数据卷 可以在容器之间共享和重用
• 对数据卷的修改会立马生效
• 对数据卷的更新,不会影响镜像
• 数据卷 默认会一直存在,即使容器被删除
3. 数据卷相关操作
Usage: docker volume COMMAND Manage volumes Commands: • 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 ls [OPTIONS] List volumes Aliases: ls, list Options: -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 volumes Options: -f, --format string Format the output using the given Go template
4. 数据卷使用
数据卷的使用,类似于 Linux 下对目录或文件进行 mount。
用户可以通过docker run的--volume/-v或--mount选项来创建带有数据卷的容器
官方文档说明连接: docker run使用说明 --volume使用说明
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数据卷容器
数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载,如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
数据卷数据备份
声明:博文内容纯属个人理解,有异议请点评
Recommend
-
30
一、MacVlan实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署Consul服务实现Docker容器跨主机通信Macvlan工作原理:Macvlan是Linux内核支持的网络接口。要求的Linux内部版本是v3.9–3.19和4.0+;通过为物理网卡创建Macvlan子接口,允许一块物理...
-
17
解密 Docker 挂载文件,宿主机修改后容器里文件没有修改
-
4
有时我们并没有配置某文件的映射关系, 当需要调整时, 就需要将文件进行复制. 所以本篇文章来记录下如何在docker容器和宿主机直接传输文件. 首先来确认下你的容器ID: docker ps 拿到需要传输文件...
-
4
Docker 容器时间如何与宿主机同步问题解决方案小结如果在启动 Docker 容器的过程中没有单独配置 localtime,很可能造成 Docker 容器时间与主机时间不一致的情况,比如 UTC 和 CST 相差 8 小时,换句话来说就是容器时间与北京时间相差 8 个小时。 2020 年...
-
3
docker容器显示完整主机名称PS1设置2017年12月14日 by anzhihe·0评论 · 2,087 人阅读 · 隐...
-
4
在 Docker 容器中访问主机 发表于
-
3
在使用Docker部署应用时,Docker推荐的方式是将应用及其所依赖的服务(MySQL,Redis等)均使用Docker部署,并通过link或自定义网络相连接。但是,当应用所依赖的服务被安装在宿主机上时,我们需要让容器中的应用能够访问到部署在宿主机上的服务。本文将介绍实现...
-
4
Docker容器访问宿主机网络 2018-10-16 最近部署一套系统,使用nginx作反向代理,其中nginx是使用docker方式运行: $ docker run -d --name ngi...
-
3
云原生之Docker容器跨主机指定IP通信-51CTO.COM
-
3
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK