Docker Swarm介绍

DockOne 发表了文章 • 0 个评论 • 10820 次浏览 • 2014-12-07 20:47 • 来自相关话题

Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来说,Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运 ...查看全部
Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来说,Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。
logo.png

Docker默认调度器会根据Docker容器的工作负载以及集群中主机的可用资源,使用bin pack自动优化工作负载。 例如,调度一个需要1G内存的Redis容器:

% docker run -d -P -m 1g redis

为了支持特定的需求和基于策略的调度,Docker Swarm还提供了标准和自定义约束。比如为了保证好的IO性能,用户可能想在SSD上运行MySQL容器,这个时候可以定义如下约束:

% docker run -d -P -e constraint:storage=ssd mysql

docker-swarm_w_450.png

除了资源优化,Docker Swarm可以保证应用的高可用性和容错性。Docker Swarm会不断的检查Docker Daemon所在主机的健康状态。当某个主机不可用时,Swarm就会将容器迁移到新的主机上。
Docker Swarm的亮点之一是它可以在应用的生命周期内扩展,也就是说当应用从一个主机扩展到2个、20个或者200个的时候,用户可以保证接口的一致性。
同样,和Machine一样,Swarm的架构是可插拔的,系统已经包含一个默认的调度器。其它的厂商可以实现自己的调度器。
可能上面的解释不太好理解,读者可以看完例子后再回来看上面那段话。或者可以看看作者(Andrea Luzzardi)在DockerCon上的演讲稿

CoreOS的集群中的Discovery服务器搭建,有朋友在这方面有所研究不?

回复

jamlee 回复了问题 • 2 人关注 • 1 个回复 • 4529 次浏览 • 2014-12-07 20:40 • 来自相关话题

Docker Machine介绍

DockOne 发表了文章 • 0 个评论 • 24144 次浏览 • 2014-12-06 21:24 • 来自相关话题

Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。Docker官方是这样介绍Machine的初衷的 ...查看全部
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。Docker官方是这样介绍Machine的初衷的:

之前,Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的。而有了Machine后,不管是在笔记本、虚拟机还是公有云实例上,用户仅仅需要一个命令....当然那你需要先安装Machine。

docker-whales-transparent_meitu_1.jpg

Machine的命令也非常简单:

% machine create -d [infrastructure provider] [provider options] [machine name]

看着有点懵,infrastructure provider是啥?machine name是啥?我使劲想了半天也没想到好的中文翻译,但是你看例子就明白它们的意思了。

$ machine create -d virtualbox dev
[info] Downloading boot2docker...
[info] Creating SSH key...
[info] Creating VirtualBox VM...
[info] Starting VirtualBox VM...
[info] Waiting for VM to start...
[info] "dev" has been created and is now the active host. Docker commands will now run against that host.
$ machine ls
NAME ACTIVE DRIVER STATE URL
dev * virtualbox Running tcp://192.168.99.100:2375
$ export DOCKER_HOST=`machine url` DOCKER_AUTH=identity
$ docker run busybox echo hello world
Unable to find image 'busybox' locally
Pulling repository busybox
e72ac664f4f0: Download complete
511136ea3c5a: Download complete
df7546f9f060: Download complete
e433a6c5b276: Download complete
hello world
$ machine create -d digitalocean --digitalocean-access-token=... staging
[info] Creating SSH key...
[info] Creating Digital Ocean droplet...
[info] Waiting for SSH...
[info] "staging" has been created and is now the active host. Docker commands will now run against that host.
$ machine ls
NAME ACTIVE DRIVER STATE URL
dev virtualbox Running tcp://192.168.99.108:2376
staging * digitalocean Running tcp://104.236.37.134:2376

Machine做事也很聪明,很符合Docker公司的做事风格,他们号称自己架构很好,方便第三方集成。所以Machine现在只支持有限的几个平台(VirtualBox、 Digital Ocean、Microsoft Azure),其它平台的兼容留给那些爱Docker的第三方厂商以及开发者去做吧。所以接下来一定会有很多的厂商跟进,比如国内阿里云之类的,他们根据官方的接口开发个Driver即可加入Machine的能力。
需要注意的是Machine是完全独立于Docker项目的,目前的主要维护者是也是一位叫Ben的人,当然还是使用Go语言。



感谢郭蕾的投稿。

Docker发布新的跨容器的分布式应用编排服务

DockOne 发表了文章 • 0 个评论 • 6188 次浏览 • 2014-12-05 23:30 • 来自相关话题

12月4日,Docker宣布发布跨容器的分布式应用编排服务,编排服务可以帮助开发者和运维人员创建并管理新一代的可移植的分布式应用程序,新一代的分布式应用程序是由独立且互通的Docker容器快速组合而成,他们有动态的生命周期,并且可以在任何地方以可扩展的方式运行 ...查看全部
12月4日,Docker宣布发布跨容器的分布式应用编排服务,编排服务可以帮助开发者和运维人员创建并管理新一代的可移植的分布式应用程序,新一代的分布式应用程序是由独立且互通的Docker容器快速组合而成,他们有动态的生命周期,并且可以在任何地方以可扩展的方式运行,不管是在开发者的笔记本上,还是在云端。

“一开始用户在几台主机上运行少量的Docker容器,但是现在他们已经在集群和不同的基础设施中运行了大量的Docker容器,我们需要满足用户的需求,这非常重要”。Docker的创始人兼CTO Solomon Hykes说道。“编排服务开放了原生的接口,可以保证应用的可移植性,并通过一个通用的UI整合了生态圈中的18000个工具和60000个容器化的应用。”

Docker编排服务可以在正在召开的DockerCon欧洲大会上看到,它已经得到了很多合作伙伴的支持,包括Cisco、Digital Ocean、HP、IBM、Mesosphere、Microsoft和VMware。

Docker平台加强了跨容器的分布式应用能力

Docker编排功能在开放平台的基础上构建,开放平台能够创建企业级标准的Docker容器:将分散的应用服务打包到可交互、可迭代、可随处运行的容器中。Docker编排服务可以满足企业从整体式的应用转移到容器化的分布式应用的需求,因为编排这些分布式应用需要多个容器、多个主机以及可以在这些设施中运行的工具和通用UI。

编排服务为应用的开发和运维提供了一种新的方式

Docker的编排功能由3个新的平台服务组成,它们覆盖了分布式应用的所有动态生命周期,当新的代码或者新的容器化服务改变时,应用可以在几分钟内部署到生产环境,而不是像之前一样需要几个月。Docker的编排服务是目前市场上功能最全面的服务,它们独特的模块化结构决定了其可以被不同的人员使用,包括开发者、运维人员以及其它合作伙伴。比如它其中就有一项服务可以帮助开发人员方便地创建分布式的应用程序栈,而另外一个服务可以重点处理集群以及运维团队的问题。
这三个新的编排服务分别是:

Docker Machine:这项服务进一步扩展了分布式应用的可移植能力,它为用户提供了灵活的功能,用户可以在任何主机上运行Docker容器,不管是笔记本、数据中心VM还是云端。这大幅度减少了开发者在手动设置、自定义脚本的时间,可以加快迭代和研发周期。

Docker Swarm:Docker Swarm是一个支持Docker容器(由Docker Machine提供)的原生的集群服务,它在分布式的应用运行的主机提供了一个资源池。相比于手动管理资源的低效率以及易出错的问题,Docker Swarm可以自动平衡容器工作负载和分配资源,它更加高效。在行业中,Docker Swarm是独一无二的,它是专门为从开发到运维的一个持续的生命周期而设计的。开发者可以在生产环境的几台机器上测试集群服务,同时运维团队可以使用相同的工具在不同的架构中的上百台主机上扩展相同的应用程序。

Docker Swarm API支持插件化的集群实现,以便客户选择其它的高可扩展的解决方案,比如Mesosphere需要管理上千个节点的容器。

Docker Compose:这项服务为开发者提供了应用组合的能力,这些应用基于独立于任何底层基础设施的分散的、可交互的Docker容器之上构建,以便于分布式的应用栈可以随时随地部署并迁移。Docker Compose通过一个简单的YAML配置文件来定义分布式的应用程序栈以及依赖,这样一个复杂的过程通过几次键盘输入就可以完成。这个强大的功能也就意味着一个新的集群应用可以在几分钟之内构建完成,而这在之前是不可思议的。

本文翻译自Docker官方博客

CoreOS称Docker有根本性缺陷,推出自己的容器引擎Rocket

田浩浩 回复了问题 • 4 人关注 • 1 个回复 • 5136 次浏览 • 2014-12-05 09:27 • 来自相关话题

为什么CoreOS和Docker的分手是命中注定的

DockOne 发表了文章 • 0 个评论 • 5519 次浏览 • 2014-12-04 20:15 • 来自相关话题

本文翻译自Why Docker and CoreOS’ split was predictable,原文作者Daniel Compton。中文翻译来自七牛云存储&version=11020012&pass_ticket=lkf9QVxqd5MMciJiV7BN ...查看全部
本文翻译自Why Docker and CoreOS’ split was predictable,原文作者Daniel Compton。中文翻译来自七牛云存储&version=11020012&pass_ticket=lkf9QVxqd5MMciJiV7BNzF4GrbLNzvUjAxWzbjNzLd3M7SeuiWN4bxF2GDa%2B8lre),DockerOne基于七牛云的翻译进行了整理。

韦恩·格雷茨基曾说过:“我总是溜向冰球将达到的点,而不是追逐它曾在的地方。

关于Docker是否应该扩大产品的边界以扩张CoreOS的集群管理范围的争论由来已久,这也直接导致了CoreOS开发了自己的容器Rocket来与Docker争雄。这种现象可以被Clayton Christensen教授的 Law of Conservation of Modularity 一书中的观点合理地解释:

0.jpeg

“根据我们的研究,存在这样一种现象,当价值链上的一种产品在商品化的同时,与此同时在价值链上肯定会有一种当前产品非商品化的趋势,这种相互作用的进程就意味着,当新的破坏性浪潮冲刷一个行业时,差异化能力仍然在价值链上不断的转移着。当发生这种情况时,那些将自身定位再不够完善的价值链区间的企业就能够盈利”



-Clayton Christensen, 第六章:创新者的方法。

关于Docker和CoreOS之间的这点事在科技界并不新鲜,在计算机产业发展的初期就曾经发生过。当差异化能力在价值链上不断的转移时,力图拥有这种能力的人之间就会产生各种对抗。就像在冰球比赛中一样,总有人滑向价值将要产生的地方。

历史不会重演,但总是惊人的相似。起初,大型机的发展总是差强人意,所以被整体设计、制造和出售是一个大的趋势。IBM在这一整合的历史趋势中获得了大部分利润,由于它的供给能够填补当时这种趋势中的不足。几年后,小型机和大型机已经发展得足够完善了。这时候利润从组装整个机器的整合资源者(如IBM和康柏)转移到各个部件的生产商了:操作系统(微软),处理器(Intel),存储器和驱动器。现在又到了整合资源的商家通过填补整合资源的空白来获取利润的时代了。

在台式机的领域里,处理器和操作系统一开始不那么令人满意,因此价值转移至此并不断被持续改善。但存储器和驱动器就不那么幸运。当他们发展得足够好并且能够进行模块化操作的时候,利润早已经被生产DRAM的厂家瓜分大半。

在云服务领域,截至2013年云服务商提供的虚拟机服务已经足够完善而且成功商品化。发展得并不尽如人的方面是应用的重构、部署和多服务器的管理。这时涌现了一大批工具如puppet、chef 和ansible,但是所有工具的表现不分伯仲。直到王者Docker在Github上的出现才打破了现有的格局。

从模块化和整合化的方面来说,我们可以认为Docker被设计的初衷是在独立封装和在任何平台都可以同步运行。Docker将操作系统、虚拟机、物理机和基于上面的操作整合起来进行商品化。同时提供了一系列的API,使得其他人能够基于这些API进行操作。Docker不能商品化的部分是数据中心,我们稍后会解释为什么特别强调这一点。

从一个开发者的角度,把应用封装在Docker的意义在于你可以你整个云服务作为一个模块进行操作,这其中的模块只是一个可以被替代的商品。Docker的伟大之处在于你可以任意地把你的应用进行迁移而无需做出其他改动。这对于谷歌这样的云服务的提供者可不是一个好消息,因为用户的迁移成本变得非常低。这时代,价值就从提供虚拟环境VM的云服务商流向Docker。

Docker对于开发者的意义在于,封装应用只需要Docker就够了。可以预见的是将会很快出现一大批公司提供基于Docker的无差异的整合服务。最著名的无疑是CoreOS。CoreOS提供了分离式的Linux版本服务和基于容器Docker的集群服务。CoreOS剥离了虚拟机和容器Docker,并以单一集群和商品化的数据中心进行代替。价值再次进行转移,从Docker转向整合Docker之后提供的服务。无论他们承认与否,CoreOS与其友商都是其他云服务商的潜在威胁:他们要将云服务及其建立在之上的整合平台进行商品化

感受到这样的威胁,如果采取调整自己的服务以适应Docker的发展这样的策略对于谷歌这样的云服务提供商来说并不奇怪。他们的服务可以基于自己的硬件平台并将Docker整合在自己的服务里进行管理,这可以使价值重新分布。但令人大跌眼镜的是,谷歌又推出了自己的容器集群管理工具 Kubernetes,直到现在我还是不能理解。

那最后留给Docker的是什么呢?从一开始它提供了一个模块化的组件供其它应用使用。这对于其他组件是有很大价值的,但对Docker却没有什么价值,因为这个过程并不能获得极大的利润。完全商品化并不是一条好的出路,对于Docker的投资人来说肯定也不会带来极高的回报率。

所以CoreOS肯定会把Docker当作一个商品的构成要素,当Docker意识到自己的价值不过是被像CoreOS这样的企业作为一个工具来创造价值的时候,Docker肯定不能只是继续停留在OS层面提供价值。对于Docker来说,惟一的出路是向上一层发展。基于Docker进行构建和运行并且进行管理的整合式集群服务对Docker来说才有意义。

CoreOS对这种变化是非常在意的,因为Docker对于他们来说 ,在开发者中间,是一个极大的潜在竞争者。最自然的反应就是构建一个新的容器作为和Docker进行博弈的工具从而支持他们本来自己的服务。Rocket从出生开始相对于Docker就有技术方面的优势,这是因为它本身就是CoreOS制造用来抵挡来自Docker的威胁。

在不久的将来,集群管理也将会被完全商品化,价值将会流到别的地方,这种循环又会重新上演。这种把戏,跟打冰球没什么两样。

Docker部署SDN环境

DockOne 发表了文章 • 0 个评论 • 3112 次浏览 • 2014-12-04 17:28 • 来自相关话题

感谢作者李呈的投稿。 #前言 5月份的时候,当我还是一个大学生的时候,有个网友问我,你有研究Docker吗?当时我连Docker是什么都不知道。谷歌之后,对Docker产生兴趣,但是一直没有时间去学习。这个周终于将这个学习计划列入了To ...查看全部
感谢作者李呈的投稿。
#前言
5月份的时候,当我还是一个大学生的时候,有个网友问我,你有研究Docker吗?当时我连Docker是什么都不知道。谷歌之后,对Docker产生兴趣,但是一直没有时间去学习。这个周终于将这个学习计划列入了Todolist。所以我花了3天时间,认真地把这《Docker 从入门到实践》看完并实践了一遍,收获颇丰。虽然我的导师以及我自己还是觉得我在瞎转,而且我觉得没有方向的日子很痛苦。所以只好自己做计划,学习点新知识,打打基础了。本篇内容主要介绍什么是Docker、Docker简单入门以及如何使用Docker部署SDN环境,以及docker的网络配置等内容。What is Docker和Why Docker部分摘自《Docker从入门到实践》。
#What is Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
virtualization.png

docker.png

图1:Docker和虚拟机对比
#Why Docker
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
##更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
##更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
##更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
##更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
#Docker简单入门
谷歌出来的教程实在太多了。所以我也不打算太多介绍,只讲一些我觉得对于网络研究人员而言比较有用的命令。
##基本概念
镜像(Image):镜像是一个只读模板。用户上传制作好的镜像供其他人下载使用。用户可以基于镜像去创建Container。
容器(Container):容器可以理解为一个隔离起来的linux环境,用于运行应用,Namespace可以帮助你理解。
仓库(Repository):如果你会使用Git/Github的话,不难理解,就是用于存放镜像的场所。
##Docker安装
本文的实验环境是Ubuntu14.04-amd64。非常需要注意的一点是,目前Docker只支持64位机器。Ubuntu14.04安装方式有两种:1)通过系统自带包安装和2)通过Docker源安装。推荐第二种方式,能安装比较新的版本。
```shell
sudo apt-get install apt-transport-https
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker
```
#获取镜像
首先,推荐到注册帐号,这样可以向使用Git/Github那样使用Docker/Dockerhub。注册和登陆可通过如下命令完成:
```shell
docker login```
注册之后,可以通过如下命令进行搜索,如搜索ryu:
```shell
docker search ryu```

可以从搜索结果中的Star来确定资源的好坏,从而找到合适的images,如muzixing/ryu。然后使用如下命令,将其拉到本地:
```shell
docker pull muzixing/ryu```

下载完成后,可以通过如下命令查看已存在的images
```shell
docker images```
7f593341jw1emxdzs4wf6j20qp04rdh0.jpg

图2:images
#创建容器
创建容器使用示例如下,-t=tty, -i=interactive, -d=debug, -p=port, --name 可以用于命名container。 其他的命令可以通过--help来查看。
```shell
docker run -i -t --name muzixing/ryu:SDN /bin/bash```
如果你需要对端口映射,或者网络配置方面的设置,还需要仔细去查看手册。举例如下:
```shell
docker run -i -t -p :: --name muzixing/ryu:SDN /bin/bash```
以上命令创建并运行了一个名字叫的container,并且将容器内部的端口port映射到主机的某个port,完成了端口映射,允许外网访问容器。这是容器与外界通信的方式之一。如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 /etc/default/docker 中指定 DOCKER_OPTS="--ip=IP_ADDRESS",之后重启 Docker 服务即可生效。设置网络访问的参数默认是 --icc=ture,如果--icc=false,则禁止网络访问。
查看容器:
```shell
docker ps [-opt]```

-a为全部容器。
查看打印信息可以通过:
```shell
dokcer logs ```
暂停容器:
```shell
docker stop ```
开启暂停的容器:
```shell
docker start ```
重启容器:
```shell
docker restart ```
有时候我们开启了容器,但是没有开窗口,在后台运行,可以通过一下命令进入容器:
```shell
docker attach ```
#部署SDN控制器RYU
首先获取镜像:
```shell
docker pull muzixing/ryu```
然后创建容器,并将容器的6633端口绑定到主机的6633端口。
```shell
docker run -i -t -p 0.0.0.0:6633:6633 --name ryu3.15 muzixing/ryu:SDN /bin/bash```
进入容器之后,运行ryu.
在另一个能ping通运行容器主机的机器上运行mininet.
7f593341jw1emxf7rriqyj20k10cp75p.jpg

图3:mininet运行图
从上图可以看出控制器IP是172.16.192.128。这个IP地址的主机网卡信息如下:
7f593341jw1emxdzrwx4nj20k20jadkv.jpg

图4:Host地址信息
从图上可以看出,与mininet通信的是主机(实际情况下会是某台服务器)eth0的地址。但是从下面的图中看出运行的RYU地址是172.17.0.5。为什么可以通信呢?

图5:容器信息
因为做了端口映射,将主机的所有接口的6633端口的地址都转发到容器172.17.0.5的6633端口,从而完成数据通信。其实现的原理是:Docker在启动之后,会创建一个docker0的网桥,从图4可以看到。然后还会创建veth pair。其中一端挂载在网桥上,如图4的vethba5f9f3,另一端是容器的网卡eth0,此案例中是172.17.0.5的网卡。其实这相当与一个link。原理图如下:
7f593341jw1emxfusmbzoj20l30dhmy1.jpg

图6:Docker网络通信原理
在运行容器的主机上使用iptables命令查看nat规则:
7f593341jw1emxf7rim1mj20jj082dh5.jpg

图7:iptables查看NAT。
同理mininet,或者其他的应用程序也可以使用容器部署,不再赘述,读者可自行尝试。
#上传镜像
首先需要将部署了应用的容器导出为tar文件。可以使用docker export container > file 命令。举例如下:
```shell
docker export ryu3.15 > ryu.tar ```
然后使用docker import命令将其导入为镜像:
```shell
cat ryu.tar | sudo docker import - muzixing/ryu:sdn```
以上命令为读取ryu.tar 将其导入成muzixing/ryu:sdn的image。完成之后可通过docker images查看。
确保无误之后,可将其推送到Dockerhub。
```shell
docker push muzixing/ryu```
读者也可以尝试更好的自动创建方式。
#网络配置
我们完全可以将Docker理解成一个独立的主机,可以对其网络进行配置,如配置DNS,iptables等。可以通过启动时配置,也可以通过修改文件的方式配置。

-b BRIDGE or --bridge=BRIDGE --指定容器挂载的网桥
--bip=CIDR --定制 docker0 的掩码
-H SOCKET... or --host=SOCKET... --Docker 服务端接收命令的通道
--icc=true|false --是否支持容器之间进行通信
--ip-forward=true|false --请看下文容器之间的通信
--iptables=true|false --禁止 Docker 添加 iptables 规则
--mtu=BYTES --容器网络中的 MTU

文件配置则如同正常的主机配置,进入到/etc/目录下,修改制定文件即可。同样的,Dokcer可以配置网络链接的网桥,可以不选择docker0网桥,而选择其他网桥,如使用brctl创建的网桥,或者使用OpenvSwitch创建的网桥,具体操作不再赘述。
#后语
工欲善其事,必先利其器。Docker可以允许我们更灵活地使用资源,并且可以很方便地迁移环境。比如以后需要安装RYU的同学就不需要再去关注,为什么six版本不够?为什么gcc报错这些问题了。只需要有一台64位的机器,然后安装docker,理论上是不会有错的。然后将镜像下载下来,创建并运行容易,就可以得到ryu控制器运行的环境。同理Nginx,Tornado和MySQL等软件也可以直接获取,而不需要自己安装配置环境。这大大加快了生产环境的部署,也显著提高了资源的利用率,个人认为将在未来对虚拟机产生强烈的冲击。

【Deis文档】使用Deis之管理应用程序

DockOne 发表了文章 • 0 个评论 • 2855 次浏览 • 2014-12-03 20:08 • 来自相关话题

【Deis文档】使用Deis之配置一个应用程序

DockOne 发表了文章 • 0 个评论 • 2844 次浏览 • 2014-12-03 20:06 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 一个 Deis 应用程序[在环境变量中存储配置][1] 配置一个应用程序 为已经已部署的应用程序使用 `deis config` 来修改环境变 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

一个 Deis 应用程序[在环境变量中存储配置][1]
配置一个应用程序
为已经已部署的应用程序使用 `deis config` 来修改环境变量。
```
$ deis help config
Valid commands for config:
config:list list environment variables for an app
config:set set environment variables for an app
config:unset unset environment variables for an app
config:pull extract environment variables to .env
Use `deis help [command]` to learn more
```
当配置改变了,一个新发行版被创建和被自动部署。
附加的支持服务
Deis 把支持服务如数据库(databases), 缓存(caches) 和 队列(queues)看作是[附加资源][2]。
比如,使用 ` deis config` 设置一个 DATABASE_URL,给应用程序附加一个外部的 PostgreSQL 数据库。
```
$ deis config:set DATABASE_URL=postgres://user:pass@example.com:5432/db
=== peachy-waxworks
DATABASE_URL: postgres://user:pass@example.com:5432/db
```
执行 `deis config:unset` 拆分。
定制域名
你可以使用 `deis domains` 来添加或移除定制的域名到你的应用程序。
```
$ deis domains:add hello.bacongobbler.com
Adding hello.bacongobbler.com to finest-woodshed... done
```
一旦完成这个,你可以进入你的 DNS 注册商,并从新的应用名字到旧的设置一个 CNAME。
```
$ dig hello.deisapp.com
[...]
;; ANSWER SECTION:
hello.bacongobbler.com. 1759 IN CNAME finest-woodshed.deisapp.com.
finest-woodshed.deisapp.com. 270 IN A 172.17.8.100
```

注意
为你的根域名设置一个 CNAME 会引起问题。设置你的 @ 记录作为一个 CNAME 会引起所有的流量到其他的域名,包括 mail 和 SOA(“start-of-authority”)记录。高度推荐你给应用程序绑定一个子域名,不管怎样,你可以通过指定 @ 记录到负载均衡的地址来变通。
追踪变化
每次对你的应用程序做了一次构建或是配置变更,一个[新版本][3]被创建。使用 `deis releases` 追踪你应用程序的变化。
```
$ deis releases
=== peachy-waxworks Releases
v4 3 minutes ago gabrtv deployed d3ccc05
v3 1 hour 17 minutes ago gabrtv added DATABASE_URL
v2 6 hours 2 minutes ago gabrtv deployed 7cb3321
v1 6 hours 2 minutes ago gabrtv deployed deis/helloworld
```
回滚应用程序
使用 ` deis rollback` 来恢复到前面的版本
```
$ deis rollback v2
Rolled back to v2
$ deis releases
=== folksy-offshoot Releases
v5 Just now gabrtv rolled back to v2
v4 4 minutes ago gabrtv deployed d3ccc05
v3 1 hour 18 minutes ago gabrtv added DATABASE_URL
v2 6 hours 2 minutes ago gabrtv deployed 7cb3321
v1 6 hours 3 minutes ago gabrtv deployed deis/helloworld
```
[quote] 注意
所有的发行版(包括回滚)都会追加到发行分类。

[/quote]


[1]: http://12factor.net/config
[2]: http://12factor.net/backing-services
[3]: http://docs.deis.io/en/latest/reference/terms/release/#release

【Deis文档】使用Deis之使用 Docker 镜像

DockOne 发表了文章 • 0 个评论 • 2681 次浏览 • 2014-12-03 20:04 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 Deis 支持通过使用一个已经存在的 [Docker 镜像][1]来部署应用程序。这对于把 Deis 集成到基于 Docker 的 CI/CD pipelines 中非 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

Deis 支持通过使用一个已经存在的 [Docker 镜像][1]来部署应用程序。这对于把 Deis 集成到基于 Docker 的 CI/CD pipelines 中非常有用。
提取准备应用程序
从 clone 一个示例应用程序开始:
```
$ git clone https://github.com/deis/example-go.git
$ cd example-go
$ git checkout docker
```
下一步使用你本地的 docker 客户端来构建镜像并 push 到 [DockerHub][2]。
```
$ docker build -t /example-go .
$ docker push /example-go
```
# Docker 镜像要求
为了部署 Docker 镜像,它们必须使以下的要求一致:
    []Dockerfile 必须暴露(EXPOSE)仅仅一个端口[/][]暴露的端口必须是一个 HTTP 服务,可以连接到一个 HTTP router[/][]必须为正在运行的容器规定一个默认的 CMD[/]

注意
Dockerfiles 暴露超过一个端口将在 issue 1156 讨论(hit)。
创建一个应用程序
使用 `deis create` 在 [Controller][3] 上创建一个应用程序。
```
$ mkdir -p /tmp/example-go && cd /tmp/example-go
$ deis create
Creating application... done, created example-go
```
[quote] 注意
deis 客户端使用当前目录的名字作为默认的应用名
部署应用程序
使用 `deis pull` 从 [DockerHub][4] 或一个私有 registry 部署你的应用程序。
```
$ deis pull gabrtv/example-go:latest
Creating build... done, v2
$ curl -s http://example-go.local3.deisapp.com
Powered by Deis
```
因为你正在部署一个 Docker 镜像,在第一次部署时,cmd 进程类型是自动扩展到 1。
> 注意
很快就会支持 Docker registry 身份校验
定义进程类型
Docker 容器有默认的命令,通常由 [CMD 指令][4]规定。Deis 使用 `cmd` 进程类型引用这个默认命令。
当使用 Docke 镜像时,进程类似除了 cmd 其他是不支持的。

[/quote]


[1]: https://docs.docker.com/introduction/understanding-docker/
[2]: https://registry.hub.docker.com/
[3]: http://docs.deis.io/en/latest/reference/terms/controller/#controller
[4]: https://registry.hub.docker.com/