Docker技术浅谈:私有化部署的优点以及在顶象内部的应用实践

顶象全景式业务安全风控体系基于新一代风控体系构建,并采用Docker技术进行私有云和公有云部署。本文主要和你们分享下Docker容器技术和顶象风控系统私有化部署的优点以及Docker容器技术在顶象内部的应用实践。算法

图片描述

Docker容器技术概述

Docker是一个开源的容器引擎,Docke是以Docker容器为资源分割和调度的基本单位,封装软件的运行时环境,用于快速构建、发布、运行分布式应用的平台。docker

Docker容器本质上是宿主机上的进程,经过namespace实现资源隔离,经过cgroups实现资源限制,经过写时复制(copy-on-write)实现高效的文件操做。容器是应用程序层的一个抽象,将代码和依赖关系打包在一块儿。 多个容器能够在同一台机器上运行,并与其余容器共享操做系统内核,每一个容器在用户空间中做为孤立进程运行。安全

图片描述
图自官网网络

Docker引擎包含Docker守护进程(Docker daemon,dockerd 命令)、REST API和Docker客户端(docker 命令)。Docker采用 C/S架构,Docker客户端与Docker守护进程通讯,Docker守护进程负责构建,运行和分发Docker容器。 Docker客户端和守护进程能够在同一个系统上运行,也能够将Docker客户端链接到远程的Docker守护进程。 Docker客户端和守护进程使用REST API经过UNIX套接字或网络接口进行通讯。Docker容器基于开放标准,可运行在全部主要Linux发行版,Microsoft Windows以及包括虚拟机,裸机和云上的任何基础架构上。架构

技术优点

Docker可以将应用程序与基础架构分离,从而能够快速交付软件。使用Docker,能够像管理应用程序同样管理基础架构。宿主机不须要去关心某一个容器运行所须要的依赖,只要它能够运行Docker,那么它就能够运行全部的Docker容器,容器将软件与其周围环境隔离开来,并有助于减小在同一基础架构上运行不一样软件的团队之间的冲突。app

Docker容器实现了应用环境的标准化,咱们能够为不一样应用、及其不一样的版本制做各自的镜像,实现持续集成、应用的快速交付、应用快速更新与回滚。Docker的镜像存储采用分层的形式,不一样的 Docker 容器共享一些基础的文件系统层,同时再加上本身独有的改动层,大大提升了存储的效率,经过合理的镜像构建方式,镜像所需的存储空间并不会随着镜像的数量而线性增加。在Docker的官方镜像仓库Docker Hub上,咱们能找到100,000+的镜像,经镜像仓库的统一管理,咱们只须要pull其镜像,而后经过run命令就能够快速搭建起所需的环境、部署应用。而基于Docker提供的Dockerfile,咱们能够在基础镜像上自由地构建本身所需的镜像。分布式

相较于以往的基于虚拟机部署,Docker容器更加轻量化并具有可移植性,而且不须要考虑外部的依赖问题,就像Java “Write once,run anywhere”的特性同样,JVM屏蔽了不一样平台的差别性,而Docker所提出的 “Build once,Run anywhere,Configure once,Run anything”体现了其更加便捷、部署成本更低的特性,不只可以有效屏蔽操做系统之间的差别,对于混合部署又可以屏蔽其余应用可能出现的影响,间接保证了应用的高可用,提升了资源的利用率。工具

Docker容器编排与集群管理

当Docker容器逐渐增多,应用的依赖关系变得复杂,依赖须要多个组件时,就可使用Docker容器的编排。编排是一个广义的概念,它是指容器调度、集群管理和可能其余主机供应配置。为此,Docker提供了容器集群快速编排的Compose与Swarm工具。Compose是定义、运行多容器、多服务和Swarm集群配置的应用编排程序(Define application stacks built using multiple containers, services, and swarm configurations.),使用YAML文件来配置应用程序的服务,而后经过命令建立并启动配置中全部服务,实现快速部署。性能

当应用被扩展到多台宿主机,管理每一个宿主系统和抽象化底层平台的复杂性变得更有挑战。Swarm做为容器集群的管理工具,能够很容易地部署跨主机的容器集群服务,Compose自己不支持跨主机管理容器,由于它的实现中只能链接一个docker client。Swarm把多个主机的docker engine集群抽象成一个虚拟的Docker主机。测试

在集群中一个应用或者组件发现其运行环境以及其它应用或组件的信息经过服务发现实现,一般是key/value存储,例如Consul、Etcd、ZooKeeper等。Docker1.12及以后的版本已内置SwarmKit,这是一个Swarm的升级项目,在SwarmKit中内置key/value存储,经过构建Swarm集群,在上面就能够把任务负载到不一样的机器上。Swarm集群中,节点有两种角色,manager和worker。manager节点经过实现Raft一致性算法来管理全局的集群状态,再配合Compose YML V3的语法能够方便对全部应用的配置管理,高效实现跨主机的容器编排与集群管理。

顶象风控系统的私有部署,除了考虑业务和用户数据的安全问题,还考虑了基础设施的依赖和隔离、快速部署交付、更新等,保证全部组件和服务均可快速的弹性扩容,既知足小范围的测试与业务起步阶段,也能够动态扩容适应业务发展,实现高QPS的支撑。

Docker容器技术在顶象内部的应用

目前Docker容器技术已在顶象内部大规模推行,全部应用均经过Docker容器实现部署、交付与更新。在此列举几个简单的实践例子:

一、在一个Docker容器中,一般咱们只运行一个应用,当使用容器编排时,不一样应用的启动时间不一样,同时耗费的时间又会与机器的性能有关,在docker-compose的YML文件中, depends_on, links等参数能够控制服务的启动顺序,可是实际上并不知道容器内的应用是否完成启动,当一个服务必需要依赖另外一个服务时就须要控制它们之间容器启动的时间间隔,或者在启动应用的命令中预留等待的时间,也能够对两个服务分别编排启动。

二、Compose在镜像的制做上也很方便,YML中提供了build参数用于指定Dockerfile的路径,image参数指定镜像的名称,docker-compose提供了build、push、images等命令能够为全部的应用批量制做镜像,或指定service名称,为单个服务制做镜像。同时YML支持环境变量,经过Linux export命令设置环境变量能够动态地调整参数,而docker-compose config命令则能够检查YML文件的正确性、预览最终的文件内容。

三、Docker容器日志输出的是控制台的日志,保存在/var/lib/docker/containers下以容器ID命名的目录中,在大多数状况下,咱们只须要将必要的日志内容输出到文件中,再挂载到宿主机,对此能够屏蔽一些输出到控制台的日志以减少磁盘空间的占用,同时docker run提供了参数 --log-opt 能够用于控制日志大小,在Compose中则有logging max-size相关参数。

四、Docker提供了bridge、host、overlay、container等网络模式,在实际的使用中常常会有跨主机容器访问通讯的场景,选择不一样的网络模式、合理分配应用的部署能够提升应用的性能。

五、经过Jenkins搭建持续集成环境,自动构建代码,能够快速把应用打包成镜像并自动部署,将构建结果发送到Sonar, 展现单测覆盖率,代码基本bug检测,并把失败的构建以邮件方式通知相关的开发人员,对须要发布的镜像推送到镜像仓库。基于Docker私有仓库,应用的发布更新从仓库中获取镜像分发,对不一样版本的容器区别命名,保留旧版本容器方便及时回滚。

更多业务安全类的技术分享,请关注顶象官方博客:https://www.dingxiang-inc.com...

相关文章
相关标签/搜索