如何在docker 容器 共享文件容器之间共享数据

Docker挂在一个主机目录到容器中作为数据卷 - 简书
Docker挂在一个主机目录到容器中作为数据卷
数据卷的优点
数据卷可以在容器之间共享和重用
对数据卷的修改会立刻生效
指定本机的/src/到容器的/src/下作为数据卷
[root@docker ~]# docker run -d
/src/:/src/
/bin/sh -c " sleep 1;done"
496d3b6ac9bc0d0c618dfaf66c10f78d9629ddad3424
[root@docker ~]# docker ps
CONTAINER ID
496d36766cc6
docker.io/ubuntu:latest
"/bin/sh -c 'while tr"
6 seconds ago
Up 4 seconds
dreamy_lovelace
进入启动的容器中
[root@docker ~]# docker exec -ti 496d3676 /bin/bash
查看容器中的src目录的内容,看看它是不是挂载本机了。
root@496d36766cc6:/# cd src/
root@496d36766cc6:/src# ls -al
drwxr-xr-x.
4 root root
drwxr-xr-x. 22 root root 4096 Jan
7 03:07 ..
drwxr-xr-x.
2 root root
7 03:03 fuchao
drwxr-xr-x.
2 root root
7 03:01 webapp
查看本机的src目录
[root@docker ~]# cd /src/
[root@docker src]# ls -al
drwxr-xr-x.
4 root root
dr-xr-xr-x. 18 root root 4096 Jan
6 19:01 ..
drwxr-xr-x.
2 root root
6 19:03 fuchao
drwxr-xr-x.
2 root root
6 19:01 webapp
可以看到,成功的挂载本机目录到容器中了。
现在我们在本地创建一个新的目录
[root@docker src]# mkdir fwc
我们立刻去容器中查看src目录看看是不是立刻生效了
root@496d36766cc6:/src# ls -al
drwxr-xr-x.
5 root root
drwxr-xr-x. 22 root root 4096 Jan
7 03:07 ..
drwxr-xr-x.
2 root root
7 03:03 fuchao
drwxr-xr-x.
2 root root
7 03:10 fwc
drwxr-xr-x.
2 root root
7 03:01 webapp
root@496d36766cc6:/src#
可以看到,立刻生效!!!!!!!!
一个热爱it技术的狂热分子,喜欢虚拟化 大数据
服务器搭建优化
【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1BLOG文档结构图 1.2前言部分 1.2.1导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ①MySQ...
Docker数据卷管理器,就是一个一般的容器,专门供其他容器挂载。 首先创建一个名字是dbdata的数据卷容器,创建一个数据卷载到
/dbdata [root@docker ~]# docker run -ti -v /dbdata
--name dbdata
安装步骤 1.准备环境 准备三台Ubuntu 14.40的环境(物理机和虚拟机都可以),配置DNS或者/etc/hosts文件来保证相互通过机器名可以访问,并且关闭防火墙。 2.在两台计算节点上安装Docker 登陆computer1.wyq.com和computer2.w...
这篇文章是我学习 Docker 的记录,大部分内容摘抄自 &&Docker — 从入门到实践&& 一书,并非本人原创.学习过程中整理成适合我自己的笔记,其中也包含了我自己的实践记录. 最近工作中遇到项目部署的问题,因为原先旧项目还需要继续在线服役,所以生产环境的一整套东西一...
摘要:Docker容器下环境安装Nginx笔记,中途遇到些问题希望高手指教。 1、下载依赖包和Nginx wgethttp://zlib.net/zlib-1.2.11.tar.gz wgethttps://www.openssl.org/source/openssl-1....
无论我们要申请苹果公司组织账号或者企业账号都要用到这个邓白氏编码,写这篇文章第一是想分享一下经验,让大家避免一些弯路。特别是网上有很多公司居然用这个赚钱,本就是免费申请的,简直是没道德。第二也是想做个记录,方便以后使用。 好,下面开始我们的流程: 首先登陆苹果的开发者中心,...
最近帮公司找一个职位的候选人,收到了一位小姑娘的简历,我暂时不方便看简历,就问了她是否有经验。 小姑娘说:我没有相关经验 如果她说话说到这里,也就罢了,我就会把她简历转给公司。 可是她话还没说完:我没有相关经验,如果你们公司需要有经验的,那就算了吧? 她其实是在试探我,而且...
1、现在工资比不得房产涨价涨得多,你涨一块钱工资,房子涨两块。 2、遇到挫折的时候,不要消极对待,要积极对待,一定要心宽,做到心宽不容易的。我的一些老朋友,一遇到挫折就消沉下去了,这不行,越消沉越就站不起身来。人生不要有太多计较,要向前走,要相信一年比一年好。 3、人啊,对...
每日一问0320如果刻意练习能让普通人从新手到大师,你怎么看待天赋的作用? 本书的引言提出『天赋』是否为影响一个人在某个领域有卓越表现的因素。在很多书或教导中,我们都学习发挥天赋是最容易达到外在及内在成功的原因。究竟是天赋使我们在某些领域表现特别突出?或者因为从小得到的特别...
时间极慢,黑脸少年在一樟树斜枝上昏睡,伸手仿佛能捞起一掬,时间又极快,快在十天之后,全然忘记了昨天喝得是莲花白还是竹叶青,不知觉间,黑脸少年在宁波已住了一月有余。 这段日子宁静的像被琥珀包裹住,他白天还是去码头扛些货,得些银钱,晚间会从江里带一尾鱼来屋里煮。而尹一欢十天之前...Docker容器网络指南 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
尽管媒体对容器技术存在大肆宣传,但是,应用程序打包技术仍在不断发展之中,特别是与网络有关的。
在过去的一年里,虽然Docker容器自身在网络功能方面有着长足的进步。但与此同时,Docker也构建了一个插件架构,允许更先进的网络管理工具控制容器。
同时,众多创业公司也已经开发出定制的平台来管理容器,而传统的供应商,如思科和VMware使他们的网络管理工具控制容器。因此,最初的容器网络挑战开始得到解决,但还有更多的工作要做。
一直都存在容器网络问题。容器托管在相同的物理服务器上可以相互作用和共享数据。但Docker开发者最初没有能力将容器从一个主机迁移到另一个主机,或在不同的主机上将一个容器到另一个容器建立连接。
“跨容器通讯一直是最大挑战,”技术分析师兼博客作者Keith Townsend说。“从一个容器转移到另一个,这是大多数网络专业人员会遇到的最大的挫折。”
Docker的工程师很快意识到他们需要解决这个问题。
“内置电池,但是可更换”
网络问题导致Docker在2015年3月启动收购了SocketPlane,它旨在为Docker带来本地软件定义网络功能。今年6月,Docker宣布SocketPlane技术集成到开源项目。新的网络功能使用基本的Linux桥接功能和VXLANs允许容器在相同的Swarm中与其他容器通讯。跨主机的容器网络问题已经解决。
同时,Docker也发布了libnetwork,一个开源项目允许第三方网络管理产品“插入”来取代内置的Docker网络功能。虚拟网络产品VMware的NSX、思科的ACI等6个项目是第一批被支持的第三方网络工具。
“它设置一个抽象体,Docker产品高级副总裁Scott Johnston表示。“这是一个允许容器附属于它的第三层网络。”
Docker现在有两种类型的网络管理。有本地,开箱即用功能,这要感谢Docker收购的SocketPlane,它允许跨主机网络。但是,如果用户想要更多先进的网络功能,如新网络编程,设置网络策略、安装防火墙、负载平衡器和其他网络上的虚拟应用程序,那么可以使用各种各样的网络管理产品。Docker将其称为“batteries included, but swappable(内置电池,但是可更换)。& Johnston说,他希望容器存储不久也有一个类似的插件模型。
技术层面是简单的
Docker产品高级副总裁Scott Johnston说,当涉及到容器网络,技术总是比较容易的部分。
Johnston说,这些技术能力是比较容易的部分。而让开发人员在容器中构建应用程序并且与IT商店达成共识则是更大的挑战。
容器的应用已经与传统的企业应用程序有着非常不同的特点。在过去,IT的目标是提供持续的弹性系统,但是,现在的首要任务是提供瞬动能力和敏捷、灵活的网络。
“从网络的角度来看,应用程序交付和性能是网络基础设施能否很好的支持这些新的应用和用例至关重要的层面,”思科的云基础设施服务的首席技术官Ken Owens说。“网络工程师的角色是思考诸如可编程网络和软件定义网络,网络函数虚拟化如何帮助IT系统。”
这些工具允许自动配置网络资源,而不是手动配置——这可能很快就会成为那些真正拥抱这些新的应用程序范例企业的桌面上赌注。
原文链接:
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的Ceph的RBD支持快照,我们可以通过RBD,让Docker的rootfs也跑在网络存储之上,从而实现OS、数据全部跑在网络上,从而打造无本地磁盘的容器服务。
逻辑示意图:
在host1启动docker
[root@host1 ~]#docker -d -D -s rbd
在host1拉取镜像
[root@host1 ~]# docker pull centos:latest
Pulling repository centos
7322fbe74aa5: Download complete
f1b10cd84249: Download complete
c852f6d61e65: Download complete
Status: Downloaded newer image for centos:latest
[root@host1 ~]# docker images
REPOSITORY
VIRTUAL SIZE
7322fbe74aa5
5 weeks ago
7322fbe74aa5
5 weeks ago
查看所有rbd image
[root@host1 ~]# rbd list
docker_image_7322fbe74aaacbe70cfe5d66e9
docker_image_base_image
docker_image_c852f6d61e65cddf1e8af1f6cd7db78543bfb83cdcdd9dfef20a0
docker_image_f1b10cdd206ee0cbeaa9de8d2ae09ff3c7afa
可以看到,有4个image,其中3个image对应centos:latest的3个layer。
在host2上看不到image信息。
[root@host2 ~]# docker images
REPOSITORY
VIRTUAL SIZE
[root@host2 ~]# ls /var/lib/docker/graph/
我们需要将host1上的graph的元数据信息拷贝到host2:
[root@host1 ~]# ls /var/lib/docker/graph/
7322fbe74aaacbe70cfe5d66e9
c852f6d61e65cddf1e8af1f6cd7db78543bfb83cdcdd9dfef20a0
还有/var/lib/docker/repositories-rbd文件。
这时,在host2上就可以看到image信息了:
[root@host2 ~]# docker -d -D -s rbd
[root@host2 ~]# docker images
REPOSITORY
VIRTUAL SIZE
7322fbe74aa5
5 weeks ago
7322fbe74aa5
5 weeks ago
7322fbe74aa5
5 weeks ago
容器存储共享
在host1上启动容器
[root@host1 ~]# docker run -it centos:latest
[root@8a437ea74af1 /]# ls /root
anaconda-ks.cfg
[root@8a437ea74af1 /]# echo "hello ceph" & /root/hello.txt
[root@8a437ea74af1 /]# ls /root
anaconda-ks.cfg
查看rbd map信息:
[root@host1 ~]# rbd showmapped
id pool image
snap device
docker_image_8a437ea74af139bc9ae6b083acd1dfbc4b204e7edb8417aeb225 -
停止host1容器
[root@host1 ~]# docker ps
CONTAINER ID
8a437ea74af1
"/bin/bash"
2 minutes ago
Exited (0) 9 seconds ago
insane_turing
将容器8a437ea74af1的元数据信息拷贝到host2
[root@host1 ~]# ls /var/lib/docker/containers/
8a437ea74af139bc9ae6b083acd1dfbc4b204e7edb8417aeb225
这时,就可以在host2上看到容器的信息了:
[root@host2 ~]# docker ps
CONTAINER ID
8a437ea74af1
"/bin/bash"
5 minutes ago
Exited (0) 2 minutes ago
desperate_poincare
让我们启动容器8a437ea74af1
[root@host2 ~]# docker start -ia 8a437ea74af1
[root@8a437ea74af1 /]# ls /root/
anaconda-ks.cfg
[root@8a437ea74af1 /]# cat /root/hello.txt
hello ceph
看到了吧,数据都过来了:)great!
从上面的示例中,可以看到,虽然image数据的存储到了ceph集群中,但是image的元数据、container的元数据仍然存储在本地,这会影响故障迁移,为了实现故障无数据迁移,需要进一步改造Docker,将image的元数据和container的元数据都进行集中存储。
你可以从获取Docker rbd storage driver的代码,更多信息请参考。
2014 - 2018最前沿的新书资讯
你知道如何将镜像推送到Docker Hub吗?
什么是Docker镜像让我们通过进一步学习Docker镜像来继续我们的Docker之旅。Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导文件系统有什么交互。实际上,当一个容器启动后,它将会被移到内存中,而引导文件系统则会被卸载(unmount),以留出更多的内存供initrd磁盘镜像使用。到目前为止,Docker看起来还很像一个典型的Linux虚拟化栈。实际上,Docker镜像的第二层是root文件系统rootfs,它位于引导文件系统之上。rootfs可以是一种或多种操作系统(如Debian或者Ubuntu文件系统)。在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并完成了完整性检查之后,它才会被切换为读写模式。但是在Docker里,root文件系统永远只能是只读状态,并且Docker利用联合加载(union mount)技术又会在root文件系统层上加载更多的只读文件系统。联合加载指的是一次同时加载多个文件系统,但是在外面看起来只能看到一个文件系统。联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有底层的文件和目录。Docker将这样的文件系统称为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像称为父镜像(parent image),可以依次类推,直到镜像栈的最底部,最底部的镜像称为基础镜像(base image)。最后,当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统。我们想在Docker中运行的程序就是在这个读写层中执行的。这听上去有点儿令人迷惑,我们最好还是用一张图来表示一下,如图4-1所示。图4-1 Docker文件系统层当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。比如,如果想修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。通常这种机制被称为写时复制(copy on write),这也是使Docker如此强大的技术之一。每个只读镜像层都是只读的,并且以后永远不会变化。当创建一个新容器时,Docker会构建出一个镜像栈,并在栈的最顶端添加一个读写层。这个读写层再加上其下面的镜像层以及一些配置数据,就构成了一个容器。在上一章我们已经知道,容器是可以修改的,它们都有自己的状态,并且是可以启动和停止的。容器的这种特点加上镜像分层框架(image-layering framework),使我们可以快速构建镜像并运行包含我们自己的应用程序和服务的容器。创建Docker Hub账号构建镜像中很重要的一环就是如何共享和发布镜像。可以将镜像推送到Docker Hub或者用户自己的私有Registry中。为了完成这项工作,需要在Docker Hub上创建一个账号,可以从加入Docker Hub,如图4-3所示。图4-3 创建Docker Hub账号首先需要注册一个账号,并在注册之后通过收到的确认邮件进行激活。下面就可以测试刚才注册的账号是否能正常工作了。要登录到Docker Hub,可以使用docker login命令,如代码清单4-13所示。代码清单4-13 登录到Docker Hub$ sudo docker login
Username: jamtur01
Email: james@lovedthanlost.net
Login Succeeded这条命令将会完成登录到Docker Hub的工作,并将认证信息保存起来以供后面使用。注意
你的个人认证信息将会保存到$HOME/.dockercfg文件中。
将镜像推送到Docker Hub镜像构建完毕之后,我们也可以将它上传到Docker Hub上面去,这样其他人就能使用这个镜像了。比如,我们可以在组织内共享这个镜像,或者完全公开这个镜像。注意
Docker Hub也提供了对私有仓库的支持,这是一个需要付费的功能,你可以将镜像存储到私有仓库中,这样只有你或者任何与你共享这个私有仓库的人才能访问该镜像。这样你就可以将机密信息或者代码放到私有镜像中,不必担心被公开访问了。
我们可以通过docker push命令将镜像推送到Docker Hub。现在就让我们来试一试如何推送,如代码清单4-77所示。代码清单4-77 尝试推送root镜像$ sudo docker push static_web
2013/07/01 18:34:47 Impossible to push a "root" repository.
Please rename your repository in &user&/&repo& (ex: jamtur01/
static_web)出什么问题了?我们尝试将镜像推送到远程仓库static_web,但是Docker认为这是一个root仓库。root仓库是由Docker公司的团队管理的,因此会拒绝我们的推送请求。让我们再换一种方式试一下,如代码清单4-78所示。代码清单4-78 推送Docker镜像$ sudo docker push jamtur01/static_web
The push refers to a repository [jamtur01/static_web] (len: 1)
Processing checksums
Sending image list
Pushing repository jamtur01/static_web to registry-1.docker.io (1 tags)
...这次我们使用了一个名为jamtur01/static_web的用户仓库,成功地将镜像推送到了Docker Hub。我们将会使用自己的用户ID,这个ID也是我们前面创建的,并选择了一个合法的镜像名(如youruser/yourimage)。我们可以在Docker Hub看到我们上传的镜像,如图4-4所示。提示
可以在查看到关于Docker Hub的文档和更多关于功能方面的信息。
图4-4 你在Docker Hub上的镜像自动构建除了从命令行构建和推送镜像,Docker Hub还允许我们定义自动构建(Automated Builds)。为了使用自动构建,我们只需要将GitHub 或 BitBucket 中含有Dockerfile文件的仓库连接到Docker Hub即可。向这个代码仓库推送代码时,将会触发一次镜像构建活动并创建一个新镜像。在之前该工作机制也被称为可信构建(Trusted Build)。注意
自动构建同样支持私有GitHub和BitBucket仓库。
在Docker Hub中添加自动构建任务的第一步是将GitHub或者BitBucket账号连接到Docker Hub。具体操作是,打开Docker Hub,登录后单击个人信息连接,之后单击Add Repository -& Automated Build按钮,如图4-5所示。你将会在此页面看到关于链接到GitHub或者BitBucket账号的选项,如图4-6所示。单击GitHub logo下面的Select按钮开始账号连接。你将会转到GitHub页面并看到Docker Hub的账号连接授权请求,如图4-7所示。{:-:}图4-5
添加仓库按钮
图4-6 账号连接选项图4-7 链接到GitHub账号有两个选项可以选择:Public and Private (recommended)和Limited。选择Public and Private (recommended)并单击Allow Access完成授权操作。有可能会被要求输入GitHub的密码来确认访问请求。之后,系统将提示你选择用来进行自动构建的组织和仓库,如图4-8所示。图4-8 选择仓库单击想用来进行自动构建的仓库后面的Select按钮,之后开始对自动构建进行配置,如图4-9所示。图4-9
对自动构建进行配置指定想使用的默认的分支名,并确认仓库名。为每次自动构建过程创建的镜像指定一个标签,并指定Dockerfile的位置。默认的位置为代码仓库的根目录下,但是也可以随意设置该路径。最后,单击Create Repository按钮来将你的自动构建添加到Docker Hub中,如图4-10所示。图4-10
创建你的自动构建你会看到你的自动构建已经被提交了。单击Build Status链接可以查看最近一次构建的状态,包括标准输出的日志,里面记录了构建过程以及任何的错误。如果该构建状态为Done,则表示该自动构建为最新状态。Error状态则表示构建过程出现错误。你可以单击查看详细的日志输出。注意
不能通过docker push命令推送一个自动构建,只能通过更新你的GitHub或者BitBucket仓库来更新你的自动构建。
本文摘自全球第一本Docker技术图书中文版,Docker中文社区鼎力支持! Docker核心团队成员著作,在技术圈中很有影响力。既是第一本Docker书,也非常适合作为学习Docker的第一本入门书。Docker是一个开源的应用容器引擎,让开发者可以将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,它不依赖于任何语言、框架或包装系统。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!如何在Docker容器之间共享数据_百度知道
如何在Docker容器之间共享数据
我有更好的答案
利用docker-compose可以编排服务,利用volumes_from来让容器之间共享数据。参考:希望可以帮到你
采纳率:85%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 docker容器访问数据库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信