Docker简介及与OpenStack集成 Oct 2014 Docker简介及与OpenStack集成 刘光亚(liugya@cn.ibm.com) Sina weibo: @platformer 主要两块 简单介绍docker OpenStack Docker集成
调查 多少人听说过docker? 多少人玩过docker? 有没有人在生产环境使用docker?
什么是Docker Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源。
Docker带来虚拟化手段的变化 VM Instance - Guest OS = Container
Docker安装 内核大于等于2.6.32-431 安装与平台支持 https://docs.docker.com/installation/
Docker的主要概念 镜像 image 容器 Container 仓库 Repo Dockerfile 创建docker镜像
docker build -t your-tag . Dockerfile实例 docker build -t your-tag . https://docs.docker.com/examples/nodejs_web_app/#creating-a-dockerfile
https://docs.docker.com/userguide/usingdocker/ Docker的简单使用 https://docs.docker.com/userguide/usingdocker/ -p 的意思就是 把dockerfile中EXPOSE的所有端口都映射到docker server上
Docker端口映射
Docker工作流
当docker启动时,它会在宿主机器上创建一个名为docker0的虚拟网络接口 Docker0作为容器的网关 docker0并不是正常的网络接口。它只是一个在绑定在docker server上的虚拟以太网桥。它可以使容器与主机相互通信以及容器之间的通信。每次Docker创建一个容器,它就会创建一对对等接口(peer interface),类似于一个管子的两端-在这边可以收到另一边发送的数据包。Docke会将对等接口中的一个做为eth0接口连接到容器上, demo 当docker启动时,它会在宿主机器上创建一个名为docker0的虚拟网络接口 Docker0作为容器的网关
docker run -i -t --net=host image command 优点 Docker网络(host模式) docker run -i -t --net=host image command 优点 Docker容器和Docker服务器的网络配置相同。 不需要复杂的网络配置就可以保证 缺点 端口不能冲突
Ovs+GRE保证不同docker服务器上的容器可以通信 Docker网络(OVS+GRE) OpenStack nova-docker driver有这种模式 我是手动配置的,为了保证IP不冲突,我将docker0设置为不一样的 demo Ovs+GRE保证不同docker服务器上的容器可以通信
Docker网络(大使模式1) c2->redis_ambassado(9.21.63.230)->network->redis_ambassado(9.21.63.233)->redis
Docker网络(大使模式1)
Docker相关 Google Kubernets Tutum CoreOS http://panamax.io/ Google开源的一套Docker集群管理工具 https://github.com/GoogleCloudPlatform/kubernetes Tutum 提供了一套非常友好的dashboard 支持创建docker container的application CoreOS CoreOS是一个基于Docker的轻量级容器化Linux发行版,专为大型数据中心而设计 通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度 http://panamax.io/ 主要是通过dashboard简化docker应用的部署,类似于Tutum 基于Docker的十大创业公司
Docker集成 OpenStack + Docker Hadoop + Docker Spark + Docker Mesos + Docker http://mesosphere.com/
Docker与OpenStack集成 Nova集成 HEAT集成 Container As A Service 通过Nova compute来实现 添加了一个新的nova docker drvier。 https://github.com/stackforge/nova-docker HEAT集成 添加了一个新的HEAT Resource:DockerInc::Docker::Container HEAT docker driver直接与docker server交互 没有和nova,cinder,neutron等交互 Container As A Service 为OpenStack添加一个新的服务来管理docker container Kilo blueprint:https://review.openstack.org/#/c/114044/ 设计文档:https://wiki.openstack.org/w/images/5/51/Containers_Proposal.pdf
Docker与OpenStack Nova的集成 工作原理 使用DockerHTTPClient去访问一组Docker HTTP API来管理container 参考 https://github.com/stackforge/nova-docker https://wiki.openstack.org/wiki/Docker Nova Docker driver这种方式有些缺点,例如,标准的API 扩展使用虚拟机特有的功能,但这些功能对于Docker并不适用,而且把Docker当作虚拟机来使用,Nova很难利用Docker有用的功能, 例如连接容器(主要指Docker容器间通信),基于以上的原因,Heat是更好的选项。
Docker与OpenStack HEAT的集成 工作原理 使用Docker Python客户端去访问一组Docker HTTP API来管理container 参考 https://github.com/MarouenMechtri/Docker-containers-deployment-with-OpenStack-Heat
Wordpress Docker Template
Docker运行实例
Nova和HEAT Docker Driver集成 https://github.com/MarouenMechtri/Docker-containers-deployment-with-OpenStack-Heat http://techs.enovance.com/7104/multi-tenant-docker-with-openstack-heat
Container As A Service (Kilo Blueprint) 为OpenStack添加一个新的服务来管理docker container Container Service是Container的一个集中管理服务 通过Gantt来进行资源调度,挑选docker server来部署container 可以on-demand去创建nova instance
参考 Google “OpenStack Docker HEAT NOVA”
Thanks!