目前大型互联网公司有腾讯、京东、美团、新浪、大众点评等都在使用。好比说腾讯的盖亚,基于docker部署管理,听说已经有万台规模,用于大数据处理。美团主要是用于持续集成,自动构建方面,另外新浪也作了实践。容器化是一个大趋势,之后这方面的公司会愈来愈多。git
Docker提供功能普遍,这里有几个的例子:web
Images(镜像):Docker能够经过Pull和Push命令构建对象到服务中心docker
Containers(容器):Docker能够经过Start/Stop命令管理容器的生命周期缓存
Logging(日志):Docker能够经过stdout,stderro捕获输出全部的容器内部信息服务器
Volumes(存储):Docker能够建立和管理容器的相关文件存储网络
Networking(网络):Docker能够建立管理虚拟的接口和内部全部容器之间的网络桥接架构
RPC:Docker服务器提供容许外部程序去控制全部容器的行为的API分布式
镜像是Docker管理最基础的部分,同时也是Docker最大的亮点。镜像管理涉及到镜像的制做、更新、存储、分发、权限等多个方面。微服务
镜像制做方面,应该坚持三个原则,第一是坚持镜像老是从Dockerfile生成。这样作最大的好处是能够经过Dockerfile“阅读”镜像,在后续的协做、升级维护等方面会带来巨大的便利。第二是镜像之间应该避免依赖过深,建议为三层,这三层分别是基础的操做系统镜像、中间件镜像和应用镜像。第三是坚持全部镜像都应该有对应的Git仓库,以方便后续的更新。性能
镜像的更新须要一个自动化的流程,这能够经过SCM和CI系统自动触发实现。具体的流程以下图所示。开发者首先将代码和Dockerfile提交到Git仓库,而后Git经过webhook方式触发Jenkins的主动获取代码和Dockerfile文件,Jenkins再经过Docker相关的插件生成镜像并推送镜像到私有的Registry。这样,在服务器上就能够经过拉取新的镜像部署容器。
关于Registry,可能会涉及三方面的问题,一个是单点问题,对应的解决方案能够考虑DRBD、分布式存储以及云存储。二是Regitry的性能问题,目前可用的解决方案是经过HTTP反向代理缓存来加速Layer的下载。三是Registry用户权限,Nginx LUA能够提供一个简单快速的实现方案。
和传统的发布流程相比,Docker最大的好处是不须要考虑外部依赖,利用容器的自包含的特色,咱们能够将发布回滚流程标准化和产品化。而传统的发布和回滚,须要casebycase去针对不一样应用作升级回滚的方案。要作到基于Docker的发布,镜像的生成必须坚持自动化,不然会发现升级比传统的方法更麻烦。所以在现实中咱们也发现不少企业将代码目录放到主机目录映射到容器内,这样作破坏了Docker的自包含特性,解决的办法是坚持应用镜像更新自动化。
和传统的发布流程相比,Docker最大的好处是不须要考虑外部依赖,利用容器的自包含的特色,咱们能够将发布回滚流程标准化和产品化。而传统的发布和回滚,须要casebycase去针对不一样应用作升级回滚的方案。要作到基于Docker的发布,镜像的生成必须坚持自动化,不然会发现升级比传统的方法更麻烦。所以在现实中咱们也发现不少企业将代码目录放到主机目录映射到容器内,这样作破坏了Docker的自包含特性,解决的办法是坚持应用镜像更新自动化。
因为容器是无状态的,因此存储在容器内的日志会随着容器的销毁而消失。stdout/stderr类型的日志,可经过logspout转发到syslog中心来收集。打印到文件的支持,好比accesslog,须要将日志存储到外部的Volume,并在Docker主机上使用logstash收集转发。
容器里没有CM agent,没法接收CM指令。CM运行到Host上也没法管理容器中的文件,若是手工修改容器内的配置,那新建立的容器仍然是旧的。配置大致上分为两种类型,一种是服务之间的链接信息,这种配置建议考虑使用服务发现系统,也可使用一些更加传统的方法,好比经过环境变量来协调做开发和生产环境的配置差别。一种是通常的配置文件参数,配置文件和Dockerfile应该一块儿存储到一个Git仓库,修改后自动build更新镜像。
目前Docker支持的网络包括Host网络、NAT网络、物理网桥和网络虚拟化。Host网络中容器和主机共享网络命名空间,不一样容器须要作好端口规划,防止端口冲突。Nat网络是基于四层代理以及NAT技术,依赖portmap,进出都须要转发,性能低,主机上须要作好端口规划,容易搞混。物理网桥方案,和传统虚拟机的网桥没有区别,适合容器数量有限且相对静止的场景。网络虚拟化是基于隧道的overlay网络,目前开源方案有SocketPlane、Weave、Flannel,适合数量大,动态建立销毁容器的场景。