如何在docker 拷贝文件容器内外互相拷贝数据

如何在Docker容器内外互相拷贝数据_百度知道
如何在Docker容器内外互相拷贝数据
提问者采纳
FULL_CONTAINER_ID/ssh1;destfile
2;docker/ /container/aufs/usr&#47:[plain] view plaincopy$ docker ps
B;to&#47:[plain] view plaincopy$ sudo cp path-file-host // /lib/ cranky_pare
$ docker inspect -f
'cat &rootfs/mnt/devicemapper/&bash -c 'var/**d8e703d7ed01bd7fb58d59eb16c4b83cf
3;path/file'path&#47.Id}}'mnt/to/sourcefile /to/ &#47.用输入输出符[plain] view plaincopydocker run -i ubuntu &#47. 获取容器名称或者id . 在主机上拷贝文件;docker/&var&#47.Id}}'{{;mnt/PATH-NEW-FILE
$ sudo cp path-file-host / /path/mnt/lib/docker/id&sshd -D
cranky_pare
$ docker inspect -f
&#39:latest
/file/container_id& &var/{{;sbin/{{;
或者[plain] view plaincopydocker exec -it &123abc&lib&#47.Id}}'to/ &path&#47:/path/to/path/ bash -c 'bin/container/cat & d8e703d7e303
d8e703d7ed01bd7fb58d59eb16c4b83cf
$aufs&#47. 获取整个容器的id[plain] view plaincopy$ docker inspect -f
例子;file&#47.直接在主机上拷贝到容器物理存储系统A;mnt $container
在容器内拷贝
步骤A获取的名称或者id
C;to&#47.txt &#47.用-v挂载主机数据卷到容器内[plain] view plaincopydocker run -v /host&#47:[plain] view plaincopy$ docker ps
CONTAINER ID
d8e703d7e303
solidleon/file&#39
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在Docker容器之间拷贝数据:原理与操作示例_服务器应用_Linux公社-Linux系统门户网站
你好,游客
在Docker容器之间拷贝数据:原理与操作示例
作者:Linux
Docker容器可以类比成一个目录,它可以将一个应用程序运行时所依赖的所有环境(注:此应用依赖的其他的服务或程序等)打包在一起运行;同时可 以随意的对它进行&启动&、&停止&、&移动&或者&删除&等操作。Docker容器在Linux的命名空间(Namespace)机制下被激活,这样就 可以使得运行在同一服务器上的不同Docker容器能在网络(Networking)与存储(storage)层面上被&隔离&(isolation)的 运行。每个Docker容器都是在一个Docker镜像(image)的基础上创建而来;而一个Docker镜像可以支持创建、运行多个Docker容 器,这主要取决于服务器的硬件性能。所以,Docker容器是Docker运行时的表现形式。
什么是Docker镜像?
Docker 容器是基于一个Docker镜像创建的,而Docker镜像本身则可以通过Docker命令行工具或者Dockerfiles来生成。Docker镜像既可以包含操作系统基础设施(fundamentals)也可以包含一个预先搭建好的可以直接启动的应用程序栈。Docker镜像可以被看做是一个只读的模 板,这个模板中包含了很多&层&;而任何基于这个Docker镜像的新增操作或者更新操作都会导致一个基于当前层的新的层被创建出来,这个新创建的层是直接叠加在当前层之上的而非覆盖整个Docker镜像(注:创建新层的过程就是创建新容器的过程)。这就是一个新的Docker容器是怎么被创建出来的。
从一个容器拷贝数据到另一个容器:
在容器之间拷贝数据是Docker一个重要而且基本的功能。拷贝数据到其他容器的功能可以在真实场景中,如当服务器遇到不可预见的&灾难&(注:断电,宕机)时,起到备份数据的作用。
使用容器的数据卷:
数据卷(data volume,注:位置在/var/lib/docker/volumes)是容器可以访问,但是位置不在root文件系统中的一个目录。为了能让容器之间可以共享数据,Docker让&卷&(volume)可以绕过Docker镜像的层叠机制。容器中所有对镜像的改变全部都直接存储。每个容器都有固定的运行目录在/var/lib/docker目录下;而每个容器卷的数据则默认单独存储在/var/lib/docker/volumes/目录底下。 docker run命令的-v选项能够实现容器间数据卷中数据的互相拷贝。
在这个例子中,我们假设基于镜像mymod/dvc:v1创建并运行了两个容器:dvc1与dvc2,以下是启动这两个镜像的命令:
docker&run&&d&&name&dvc1&mymod/dvc:v1&
docker&run&&d&&name&dvc2&mymod/dvc:v1
以下命令将创建并启动一个新的容器(也是基于mymod/dvc: v1镜像)但是挂载dvc1的数据卷,并使用cp命令拷贝容器dvc1中的数据到宿主机(host)上。
[root@host&~]#&docker&run&&rm&&v&/var/tmp:/host:rw&\&&volumes-&from&dvc1&cp&&r/var/www/html/host/dvc1_files&
[注:经过测试以上命令应该改为以下形式才能运行]&
[root@host&~]#&docker&run&&rm&&v&/var/tmp:/host:rw&&volumes-from&dvc1&mymod/dvc:&v1&cp&&r&/var/www/html/host/dvc1_files&
新建的容器以读-写权限挂载宿主机的/var/temp目录为/host目录,然后挂载所有dvc1的数据卷,包含dvc1中的/var/www/html 目录,然后拷贝/var/www/html的文件目录到/host/dvc1_files下,対映宿主机/var/temp目录。
现在我们用以下命令拷贝dvc1容器的数据到其他的容器中:
[root@host&~]#&docker&run&&rm&&v&/var/tmp:/host:ro&&volumes-from&dvc2&\&cp&&a&&T&/host/dvc1_files&/var/www/html&
新建的容器将宿主机的/var/tmp目录以只读的形式映射到dvc2容器的/host目录中,同时加载dvc2容器的所有数据卷,然后将/host /dvc1_files(对应宿主机/var/tmp/dvc1_files)目录的结构拷贝到dvc2容器的/var/www/html目录下。
同样的目标可以在Dockerfile中使用ADD命令实现。ADD有两个参数一个是源容器一个是目的容器。ADD命令可以实现从源容器拷贝文件或者数据到目的容器的目标,而不用管各个容器的文件系统差异。
Docker 肯定会提供更好的方式来&培养&容器化服务部署,以支持更广泛的部署平台;同时开发社区也期望Docker构建服务层级(service layer)。而Docker的做法是:开发容器核心容量,开发跨容器服务管理与通信功能。我们在这篇文章中所阐述的是数据可以在容器间被复制与冗余,这可以用来应付各种数据的损毁与恢复。Docker还提供了使用方便的容器间差异分析功能,这可以让容器更好的支持排错(debugging)、快速共享部 署环境以达到快速的部署的目标。Docker可以将容器部署环境从开发或者QA阶段直接提交到AWS部署环境。用户可以通过Docker的数据卷在容器间共享数据;可以将宿主机的目录直接挂载到容器中或者甚至可以从容器中导出数据存档,所以,Docker非常方便。
Docker安装应用( 6.5_x64)
在 Docker 中使用 MySQL
在 Trusty 14.04 (LTS) (64-bit)安装Docker
Docker安装应用(CentOS 6.5_x64)
Ubuntu 14.04安装Docker&
阿里云CentOS 6.5 模板上安装 Docker
Docker 的详细介绍:Docker 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (03月25日)
& (03月23日)
& (昨 12:00)
& (03月24日)
& (03月18日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款&& &&& Docker:利用Linux容器实现可移…
Docker是一种在Linux容器里运行应用的开源工具,一种轻量级的虚拟机。除了运行应用,Docker还提供了一些工具,借助Docker Index或自己托管的Docker注册表对进行了集装箱化处理的应用进行分发,从而简化复杂应用的部署过程。我将在本文介绍如今在部署复杂系统时公司所面临的挑战,Docker怎样有效地解决这个问题,以及Docker的其他用例。部署的挑战服务器应用的部署已经越来越复杂了,软件有很多类型的需求:对已安装软件和库的依赖依赖于正在运行的服务依赖于特定的操作系统)资源需求:最小的可用内存能绑定特定的端口我们来看一个相对简单的应用的部署:Wordpress。在服务器上部署、运行这样一个系统,我们可能会遇到下面的问题和挑战:隔离性:如果已经在这个服务器上部署了不同的网站,已有的网站只能在nginx上运行,而Wordpress依赖于Apache,这时就会有麻烦:它们都监听80端口。同时运行两个网站需要调整配置,设置反向代理等。库级别也会出现冲突。安全性:Wordpress的安全记录并不是非常好,所以还是给它创建个沙箱。升级、降级:升级应用一般会覆盖现有文件。升级过程中会发生什么?系统要关闭么?如果升级失败,或者不对该怎么办?我们怎样快速回退到先前的版本?快照、备份:一旦所有的内容都设置好,就给系统创建一个“快照”,以便能备份快照。重复性:系统出新版本之后,比较好的做法是先在测试基础设施上自动部署并测试,然后再发布到生产系统。通常会利用诸如Chef、Puppet等工具在服务器上自动安装一堆包,等一切内容都就绪后,再在生产系统上运行相同的部署脚本。这在百分之九十九的情况下都没有问题。但有百分之一的例外,在部署到测试环境和生产环境之间的时间跨度里,你依赖的包在包仓库里有了更新,而新版本并不兼容。结果生产环境的设置和测试环境不同,还有可能破坏生产系统。资源限制:要是能限制应用的可用资源,比如CPU、内存和磁盘空间,就会非常方便。易于安装:也许有Debian或CentOS包,抑或是能自动执行所有复杂步骤并安装Wordpress的Chef菜谱。但这些菜谱很难稳定下来,这样的话,安装就是个复杂的系统工程,而不是午休期间就能搞定的事情。易于移除:软件应该能轻松、干净地移除,不留痕迹。那我们应该如何解决这些问题呢?虚拟机在单独的虚拟机上运行独立的应用,例如Amazon的EC2,大部分问题这时会迎刃而解:隔离性:在一个VM上安装一个应用,应用是完全独立的,除非它们攻入了对方的防火墙。重复性:用你喜欢的方式准备系统,然后创建一个AMI。你可以随意实例化多个AMI实例。完全是可重现的。安全性:由于我们完全隔离,如果Wordpress遭到攻击,其余的基础设施并不会受到影响。资源限制:VM会分配特定的CPU周期、可用内存和磁盘空间,没有加价的话就不能超额。易于安装:越来越多的应用能够在EC2上运行,只要在AWS marketplace上点击一个按钮就能实例化应用。易于移除:不需要某个应用了?销毁VM。干净又方便。升级、降级:Netflix如何部署代码里提到,只需要在新VM上部署新版本,然后让负载均衡器指向部署了新版本的VM。不过应用如果需要在本地保存状态,这种方法就不是很好用了。快照、备份:点击一个按钮(或者调用一下API)就能获得EBS磁盘的快照,快照会备份到S3中。不过,虚拟机在两个方面比较昂贵:金钱:你真的有那么多钱为每个应用启动一个EC2实例?另外你能预测到需要多少个实例么?时间:虚拟机相关的操作大多都很慢:启动要几分钟,捕捉快照要几分钟,创建镜像也需要几分钟。我们能做得更好吗?进入Docker的世界吧。Docker是由公共PaaS提供商dotCloud的人发起的开源项目,于去年初发起。从技术角度来说,Docker(主要用Go语言编写)试图简化两种已有技术的使用:LXC:Linux容器,允许独立进程在比普通Unix进程更高的隔离级别上运行。使用的技术术语是集装箱化:一个容器里运行一个进程。AUFS:高级多层的统一文件系统,可用来创建联合、写时拷贝的文件系统。Docker可以安装在任何支持AUFS和内核版本大于等于3.8的Linux系统上。目前只能选择Linux 3.8+和AUFS。那Docker为什么有意思呢?Docker非常轻量。启动VM是个大动作,需要占用大量内存;而启动Docker容器只耗费很少的CPU和内存,并且非常快。不仅运行容器快,构建镜像、捕获文件系统的快照也很快。它运行在已经虚拟化过的环境中。也就是说,你可以在EC2实例、Rackspace VM或VirtualBox里运行Docker。Docker容器能移植到任何运行Docker的操作系统上。让我们回到前面的部署、操作问题列表,看看Docker是怎么解决的:隔离性:Docker在文件系统和网络级别隔离了应用。从这个意义上来讲很像在运行“真正的”虚拟机。重复性:用你喜欢的方式准备系统(登录并在所有软件里执行apt-get命令,或者使用Dockerfile),然后把修改提交到镜像中。你可以随意实例化若干个实例,或者把镜像传输到另一台机器,完全重现同样的设置。安全性:Docker容器比普通的进程隔离更为安全。Docker团队已经确定了一些安全问题,正在着手解决。资源约束:Docker现在能限制CPU的使用率和内存用量。目前还不能直接限制磁盘的使用情况。易于安装:Docker有一个Docker Index,这个仓库存储了现成的Docker镜像,你用一条命令就可以完成实例化。比如说,要使用Clojure REPL镜像,只要运行docker run -t -i zefhemel/clojure-repl命令就能自动获取并运行该镜像。易于移除:不需要应用了?销毁容器就行。升级、降级:和EC2 VM一样:先启动应用的新版本,然后把负载均衡器切换到新的端口。快照、备份:Docker能提交镜像并给镜像打标签,和EC2上的快照不同,Docker是立即处理的。Docker不是什么尽管Docker有助于系统的可靠部署,但它本身并不是个完全成熟的部署系统。它操作的是容器里运行的应用。哪个容器安装在哪个服务器上,以及如何启动它们,则超出了Docker的范围。同样的,Docker也不处理跨多个容器运行的应用。要让容器互相通信,需要某些发现机制,来找出哪些IP和端口上的其他应用可用。更多精彩内容,请点击阅读原文。***********************************本文来自InfoQ微信公众账号:infoqchina1、回复“今日新闻”,查看今天更新的新闻;2、回复“今日英文”,查看今天英文站的更新;3、回复“文章 +关键词”,搜索关键词相关内容;4、回复“QCon”,了解QCon大会相关信息;5、回复“活动”,了解最近InfoQ组织的线下沙龙;6、回复“架构师”,获取《架构师》下载地址;7、回复“投稿”,了解投稿和加入编辑团队的流程。***********************************
点击展开全文
关注中高端技术人员的社区媒体,促进软件开发领域知识与创新的传播
您的【关注和订阅】是作者不断前行的动力
本站文章来自网友的提交收录,如需删除可联系QQ ,
(C)2014&&版权所有&&&|&
京ICP备号-2&&&&京公网安备34Docker特性与原理解析
文章假设你已经熟悉了Docker的基本命令和基本知识
首先看看Docker提供了哪些特性:
交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell
文件系统隔离:每个进程容器运行在完全独立的根文件系统里
写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间
资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源
网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置
从以上特性分别看实现原理
1. 交互式Shell
首先我们允许一个交互式的容器
$docker run -i -t &image name& /bin/bash
这样就建立了一个到容器内的交互式连接,看到的是如下的命令行:
root@df:/#
这里我们启动了一个容器,以bash作为其根进程.
root@df:/# ps aux
PID %CPU %MEM
STAT START
TIME COMMAND
0:00 /bin/bash
可以看到,在这个容器中,bash 的 PID为 1,而实体机平常情况下,是这样的:
root@ubuntu:~# ps aux
PID %CPU %MEM
STAT START
TIME COMMAND
0:01 /sbin/init
大家都知道,所有进程的共同祖先都是 PID=1的进程所以在容器中,所有以后创建的进程都是通过/bin/bash 创建的,PID=1的 bash是容器中所有进程的祖先理解了这点后,对容器的理解就很简单了.
2. 文件系统隔离
对于一个正在运行的容器,其文件系统都是一个从根目录开始的虚拟文件系统,在容器中看到的是这样的:
root@df:/# ll /
drwxr-xr-x
2 root root 4096 Jul 22 22:51 bin
drwxr-xr-x
2 root root 4096 Apr 10 22:12 boot
drwxr-xr-x
3 root root 4096 Jul 22 22:49 dev
drwxr-xr-x
85 root root 4096 Sep
5 06:49 etc
drwxr-xr-x
2 root root 4096 Apr 10 22:12 home
drwxr-xr-x
16 root root 4096 Jul 22 22:50 lib
drwxr-xr-x
2 root root 4096 Aug 12 03:30 lib64
drwxr-xr-x
2 root root 4096 Jul 22 22:48 media
drwxr-xr-x
2 root root 4096 Apr 10 22:12 mnt
drwxr-xr-x
2 root root 4096 Jul 22 22:48 opt
dr-xr-xr-x 356 root root
5 06:06 proc
drwx------
2 root root 4096 Jul 22 22:51 root
drwxr-xr-x
7 root root 4096 Sep
5 07:23 run
drwxr-xr-x
2 root root 4096 Aug 12 03:30 sbin
drwxr-xr-x
2 root root 4096 Jul 22 22:48 srv
dr-xr-xr-x
13 root root
5 06:06 sys
drwxrwxrwt
2 root root 4096 Sep
5 06:55 tmp
drwxr-xr-x
20 root root 4096 Sep
5 06:11 usr
drwxr-xr-x
19 root root 4096 Sep
5 06:11 var
其实真是情况是这样的,容器中的文件系统都是挂载到了真是系统中的一个目录下面./var/lib/docker/containers/&image-long-id&/rootfs这个配置是怎么来的呢,其实所有容器的管理都是通过lxc来管理的,lxc的配置文件放在/var/lib/docker/containers/&image-long-id&/config.lxc文件中有字段表示容器挂载到哪个文件目录, 比如我的是这样的:lxc.rootfs = /var/lib/docker/containers/df5cd642a6b7da3c7e417a55fad5bbd/rootfs打开看一下,一目了然:
root@ubuntu:/var/lib/docker/containers/df5cd642a6b7da3c7e417a55fad5bbd/rootfs# ll
drwxr-xr-x 53 root root 4096 Sep
5 00:23 ./
drwx------
4 root root 4096 Sep
5 00:53 ../
drwxr-xr-x
2 root root 4096 Jul 22 15:51 bin/
drwxr-xr-x
2 root root 4096 Apr 10 15:12 boot/
drwxr-xr-x
3 root root 4096 Jul 22 15:49 dev/
drwxr-xr-x 85 root root 4096 Sep
4 23:49 etc/
drwxr-xr-x
2 root root 4096 Apr 10 15:12 home/
drwxr-xr-x 16 root root 4096 Jul 22 15:50 lib/
drwxr-xr-x
2 root root 4096 Aug 11 20:30 lib64/
drwxr-xr-x
2 root root 4096 Jul 22 15:48 media/
drwxr-xr-x
2 root root 4096 Apr 10 15:12 mnt/
drwxr-xr-x
2 root root 4096 Jul 22 15:48 opt/
drwxr-xr-x
2 root root 4096 Apr 10 15:12 proc/
drwx------
2 root root 4096 Jul 22 15:51 root/
drwxr-xr-x
7 root root 4096 Sep
5 00:23 run/
drwxr-xr-x
2 root root 4096 Aug 11 20:30 sbin/
drwxr-xr-x
2 root root 4096 Jul 22 15:48 srv/
drwxr-xr-x
2 root root 4096 Mar 12 18:41 sys/
drwxrwxrwt
2 root root 4096 Sep
4 23:55 tmp/
drwxr-xr-x 20 root root 4096 Sep
4 23:11 usr/
drwxr-xr-x 19 root root 4096 Sep
4 23:11 var/
这些就是容器中的真实目录了,容器中对于目录的操作都是操作了这个host机器的真实目录。对于不同的容器,挂载点是不一样的,而容器不能穿越根目录上一级去访问, 所以这里对每一个容器都做到了文件系统隔离。
3. 写时复制
我们把每一个/var/lib/docker/containers/&image-long-id&看做是一个容器的配置目录的话,可以看到在配置目录下面有一个 rw/目录,打开看有些什么
drwxr-xr-x 9 root root 4096 Sep
5 00:23 ./
drwx------ 4 root root 4096 Sep
5 00:53 ../
drwxr-xr-x 6 root root 4096 Sep
4 23:49 etc/
drwxr-xr-x 2 root root 4096 Sep
5 00:23 run/
drwxrwxrwt 2 root root 4096 Sep
4 23:55 tmp/
drwxr-xr-x 7 root root 4096 Sep
4 23:11 usr/
drwxr-xr-x 5 root root 4096 Sep
4 23:11 var/
-r--r--r-- 1 root root
4 23:06 .wh..wh.aufs
drwx------ 2 root root 4096 Sep
4 23:06 .wh..wh.orph/
drwx------ 2 root root 4096 Sep
4 23:11 .wh..wh.plnk/
里面是一些不完整的根目录,这不能说明什么,但是我们在container中写入文件后,看看其中的变化在容器中执行以下命令root@df:/# touch /opt/x在 /opt 下我们生成了一个文件再看看
root@ubuntu:/var/lib/docker/containers/df5cd642a6b7da3c7e417a55fad5bbd/rw# ll
drwxr-xr-x 10 root root 4096 Sep
5 01:00 ./
drwx------
4 root root 4096 Sep
5 00:53 ../
drwxr-xr-x
6 root root 4096 Sep
4 23:49 etc/
drwxr-xr-x
2 root root 4096 Sep
5 01:00 opt/
drwxr-xr-x
2 root root 4096 Sep
5 00:23 run/
drwxrwxrwt
2 root root 4096 Sep
4 23:55 tmp/
drwxr-xr-x
7 root root 4096 Sep
4 23:11 usr/
drwxr-xr-x
5 root root 4096 Sep
4 23:11 var/
-r--r--r--
1 root root
4 23:06 .wh..wh.aufs
drwx------
2 root root 4096 Sep
4 23:06 .wh..wh.orph/
drwx------
2 root root 4096 Sep
4 23:11 .wh..wh.plnk/
是的,在host机器上新生成了 opt/目录,这里做到了容器的写时复制
4. 资源隔离
以系统的三大进程间通信的消息队列来看初始状态在 ghost, ipcs -q 查看消息队列
root@ubuntu:~/codes/msq# ipcs -q
------ Message Queues --------
used-bytes
在ghost 创建一个, 这里楼主自己写的代码创建的消息队列:
root@ubuntu:~/codes/msq# ./main 1
Create msq with key id 65536root@ubuntu:~/codes/msq# ipcs -q
------ Message Queues --------
used-bytes
然后在容器中查看 ipcs -q
root@df:/# ipcs -q
------ Message Queues --------
used-bytes
可以看到系统资源是隔离的,这里只是说了一部分,其实还包括了可以通过cgoup对其做CPU和Memory的Quota管理.默认情况下是使用了所有CPU和内存的,但是可以在config.lxc增加如下配置设置CPU等,具体可以参考lxc的文档lxc.cgroup.cpu.shares=512 lxc.cgroup.cpuset.cpus=1.2资源隔离的原理就在于利用cgroup,将不同进程的使用隔离开,假设每个容器都是以bash启动的,那么在容器内部,每个子进程都只能使用当前bash下面的资源,对于其他的系统资源是隔离的.子进程的访问权限由父进程决定
5.网络隔离
在安装好docker后,会默认初始化一个 docker0的网桥
Link encap:Ethernet
HWaddr ee:8c:1f:8b:d7:59
inet addr:172.17.42.1
Bcast:0.0.0.0
Mask:255.255.0.0
在host机器上,会为每一个容器生成一个默认的网卡类似这样的 vethdBVa1H veth*这个网卡的一端连接在容器的eth0,一端连接到docker0.这样就实现了每个容器有一个单独的IP.这里如果需要容器访问外网,需要将eth0设置为混杂模式:$ifconfig eth0 promisc这样看来,容器会从172.17.0.0/24 这个网段选择一个IP作为eth0的IP,这样,容器就可以和外部通过 docker0网桥通信了.在容器内部监听一个端口 python -m SimpleHTTPServer 80 && /tmp/log.log &从ghost访问 telnet 172.17.0.2 80在容器中看到如下:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
PID/Program name
0 0.0.0.0:80
2823/python
0 172.17.0.2:80
172.17.42.1:46142
在host上看到
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
PID/Program name
0 172.17.42.1:46142
172.17.0.2:80
ESTABLISHED 10244/telnet
如果需要外部能够访问容器,需要做端口映射规则,和配置虚拟机一样的道理, 只不过这里可以看到的是,80端口并没有占用了本地端口,而是在容器内部做了监听,外部是通过docker0 桥接过去的,每个容器间也做到了端口和网络隔离.
6.日志记录
不多说,在 /var/lib/docker/containers/&image-long-id&.log 下
7.变更管理
Docker的变更管理看做是git的版本管理好了。生成镜像的时候,未做改动的部分就是上一个版本的镜像的引用,如果做了改动,就是一个新的文件。
将刚才操作的容器做成镜像docker commit &image-id& &REPOSITORY&此时的镜像多出来的部分,比如我在这个镜像中安装了Python,那么多出来的部分作为新文件,其他部分任然是上一个版本的引用。你可以搭建自己的镜像服务器,push到自己的镜像服务器,从其他机器拉下来后直接可以运行。
以上,一点愚见,希望指正.
阅读(...) 评论()
4AI?Z:cp1z?_RJQle1]Gs;P!T)RHroW|

我要回帖

更多关于 docker修改容器配置 的文章

 

随机推荐