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

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

顶象全链路实时纵深防御风控基于新一代风控体系构建,并采用Docker技术进行私有云和公有云部署。本文主要和大家分享下Docker容器技术和顶象风控系统私有部署的优势以及Docker容器技术在顶象内部的应用实践。

Docker容器技术概述

Docker是一个开源的容器引擎,Docke是以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容器,容器将软件与其周围环境隔离开来,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。

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容器实现部署、交

付与更新。在此列举几个简单的实践例子:

1.在一个Docker容器中,通常我们只运行一个应用,当使用容器编排时,不同应用的启动时

间不同,同时耗费的时间又会与机器的性能有关,在docker-compose的YML文件中,depends_on, links等参数可以控制服务的启动顺序,但是实际上并不知道容器内的应用是否完成启动,当一个服务必须要依赖另一个服务时就需要控制它们之间容器启动的时间间隔,或

者在启动应用的命令中预留等待的时间,也可以对两个服务分别编排启动。

https://www.360docs.net/doc/d44679496.html,pose在镜像的制作上也很方便,YML中提供了build参数用于指定Dockerfile的路径,image参数指定镜像的名称,docker-compose提供了build、push、images等命令可以为所有

的应用批量制作镜像,或指定service名称,为单个服务制作镜像。同时YML支持环境变量,通过Linux export命令设置环境变量可以动态地调整参数,而docker-compose config命令则

可以检查YML文件的正确性、预览最终的文件内容。

3.Docker容器日志输出的是控制台的日志,保存在/var/lib/docker/containers下以容器ID命名

的目录中,在大多数情况下,我们只需要将必要的日志内容输出到文件中,再挂载到宿主机,对此可以屏蔽一些输出到控制台的日志以减小磁盘空间的占用,同时docker run提供了参数 --log-opt 可以用于控制日志大小,在Compose中则有logging max-size相关参数。

4.Docker提供了bridge、host、overlay、container等网络模式,在实际的使用中经常会有跨主

机容器访问通信的场景,选择不同的网络模式、合理分配应用的部署可以提高应用的性能。

5.通过Jenkins搭建持续集成环境,自动构建代码,可以快速把应用打包成镜像并自动部署,

将构建结果发送到Sonar, 展示单测覆盖率,代码基本bug检测,并把失败的构建以邮件方式

通知相关的开发人员,对需要发布的镜像推送到镜像仓库。基于Docker私有仓库,应用的发布更新从仓库中获取镜像分发,对不同版本的容器区别命名,保留旧版本容器方便及时回滚。

Docker容器技术与微服务解决方案

Docker容器技术与微服务解决方案

目录 一、前言 (3) 二、容器技术简介 (3) 三、Docker 简介 (4) 四、Docker 的组成 (6) 五、Docker 的实现 (8) 六、Docker 的生态圈 (15) 七、总结 (16)

一、前言 Docker 是最近在云计算领域出现的新技术。目前,Docker 和以其为代表的容器技术的热度已经改过了之前的OpenStack。Docker 以及其所代表的容器技术的流行,即使因为软件技术的进步,更是由于其符合云计算对软件领域所带来新思想。在如今的互联网和企业应用开发领域,微服务和DevOps 是两个思想颇为深入人心。而Docker 技术的出现和其对整个容器技术及其生态圈发展的促进,解决了这个微服务和DevOps 这两个思想实践中的很多难题,使得前面两种思想大规模地实现成为了可能。所以,我们有必要地深入了解一下Docker 这个技术,看看它会对云计算时代的软件开发产生什么样的影响。 本文将介绍如下内容 1.什么是容器技术 2.什么是Docker 3.Docker 是如何实现的 4.为什么要使用Docker 至于Docker 的用法,不在这里做介绍。Docker 的入门使用,可以前往Docker 官网。各种高级用法、技巧、经验,可以前往技术网站CSDN、InfoQ 和CoreOS、Centurylink Labs 等这些使用Docker 的云计算厂商的网站。 二、容器技术简介 容器技术有时会被称为轻量化虚拟技术。但不同于基于Hypervisor 的传统虚拟化技术,容器技术并不会虚拟硬件。容器本身和容器内的进程都是运行在宿主Linux 系统的内核之

《Docker技术集群与应用》课程测试试卷-2

《Docker技术集群与应用》课程测试试卷说明:本试卷由选择题和简答题两部分组成,满分100分。 一、选择题 说明:共30题,每题2分,共计60分。 针对以下题目,请选择最符合题目要求的答案。针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。 1.下列关于Docker核心概念的说法错误的是()。 A.Docker镜像是创建容器的基础,是Docker容器的只读模板 B.Docker容器可以看作是一个简易版的Linux环境,用来运行和隔离应用 C.Docker仓库是集中保存镜像的地方,可使用push命令上传自己的镜像 D.Docker容器是从镜像创建的运行实例,容器创建后容器之间可以相互可见 2.下列()属于安装Docker时所需要的依赖软件包。 A.yum-utils B. device-mapper-devel C. lvm2 D. python-docker 3.对于Docker镜像的描述错误的是()。 A.镜像文件是由若干层组成,是实现增量保存和更新的基础 B.用户从私有仓库下载镜像时,需要在仓库名称前指定完整的注册服务器地址 C.可以通过命令docker info 0b8d572d1c7d(镜像ID)查看镜像详细信息

D.可以使用docker tag命令为本地镜像添加新的标签 4.本地有一镜像httpd:new,其ID为2d1935fb3ka0,下列可成功删除该镜像的命令是 ()。 A.docker rm httpd:new B.docker rmi httpd:new C.docker rm 2d1935fb3ka0 D.docker image rm 2d1935fb3ka0 5.Docker镜像命令docker images执行后,结果内不包括的列是()。 A.C REATED B.T IME C.S IZE D.TAG 6.下列关于Docker容器说法正确的是()。 A.通过Dockerfile构建的镜像,由这些镜像启动的容器内应用都是在后台运行的 B.可以通过命令docker exec –it 容器ID /bin/bash 来进入容器内部 C.可以使用docker rm 容器ID 命令来删除一个正在运行中的容器 D.Docker的默认存储目录在/var/lib/docker 7.下列()命令执行后可以查看镜像ID为0b8d572d1c7d的详细信息。

相关主题
相关文档
最新文档