AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

Docker理念解析与技术填坑 by 孙宇聪@Coding.net

发布者 devops
发布于 1462927459329  浏览 6135 关键词 Docker, DevOps 
分享到

第3页

CODING 与 DOCKER

• 所有服务都在用 Docker Container 运行。 • 维护自己的私有 Registry 基础镜像,供开发和生产使用。 • 参与 Upstream 开发, 提交多份 Issue / Patch • 自研了生产环境容器编排系统



第4页

DOCKER: THE GOOD PARTS



第5页

DOCKER: SELF SUFFICENT PACKAGING



第6页

DOCKER: EASY APP DISTRIBUTION



第7页

DOCKER: UNIVERSAL API



第8页

DOCKER: COMMON INFRA



第9页

PACKAGING



DISTRIBUTION



DOCKER



RUNTIME



ORCHASTRATION



第10页

DOCKER: THE BAD PARTS



第11页

鸡肋的 DOCKER IMAGE

一个不那么圆的轮子



第12页

DOCKERFILE 真的有用吗

• FROM 的问题

• 基础镜像没有一个靠谱的

• Debian, Ubuntu, 还有 Centos/Fedora 基于什么的都有

• Hub上到处是雷和Abandon-ware • 新一代的 copy & paste 大法



第13页

DOCKERFILE 有用吗

• RUN 的问题

• apt-get update –y && apt-get upgrade –y • 每句加一个layer, 轻松来个十几G的镜像 • 没完没了的等,继续等,使劲等



第14页

DOCKERFILE 有卵用吗

• CMD / ENTRYPOINT 的问题

• 这俩居然也占layer, 服了. • 编译产生的垃圾谁负责?代码谁负责清理? • 有必要把运行命令写死在镜像里吗.



第15页

CODING 实践 1: BUILD & PACKAGE

接口比实现重要一万倍



第16页

BUILD

• 所有主流编程语言都已然实现了编译和打包工具

• 大约一万遍

• 依赖管理就不是个问题

• Vendoring, 自包含镜像,等等,除非姿势不正确。

• 接口统一

• 实现自己写去



第17页

PACKAGE

• 暂时还是先用 Docker Image

• 随时也可以改

• 正确的 Dockerfile 只有三行

• FROM base20151030:jre8.20u • ADD app.jar /app • CMD [ “java” , “-jar”, “app.jar” ]

• 其实也可以只有两行



第18页

废柴的 DOCKER REGISTRY

勉强凑活用,因为实在不重要



第19页

REGISTRY 的作用

• Over-engineering 的FTP • API, 客户端 library 也不那么完善 • 实在排不上优先级去折腾,先凑活用吧



第20页

坑爹的 DOCKER RUNTIME

小姐的身子,丫鬟的命



第21页

DOCKER DAEMON 大坑实录

• docker container 在 stdout/stderr 有大量数据传 输会导致内存泄露,直至 docker daemon OOM

• docker daemon 在频繁创建 container 后,会在 文件系统中遗留很多垃圾文件不清理,导致磁盘 inode 被耗尽

• docker 里面没有init, daemon也没有reap子进程 fork 很多进程,会在系统中出现很多僵尸进程,最终 导致 docker daemon 出现问题。



第22页

CODING 实践 2 去其糟粕,取其精华

没有卵用的花哨、前沿功能,一律不用



第23页

CODING 的容器配置

• 单进程, 微服务,没必要那么多限制

• trust-cooperative 环境,我们不是IAAS

• Host 网络模式

• 不趟SDN, proxy这样的浑水/雷区,性能也不受影响

• host上数据持久化

• 未来可能可以考虑data container, 但是然并卵 • 直接 mount Host locale, timezone, passwd 等配置.



第24页

不存在的 DOCKER 编排系统

Swarm, K8s, Mesos



第25页

神仙打架,百姓遭殃

• Swarm, kubernetes, Mesos

• 都处于早期,步子迈的太大。

• 动态伸缩的需求有,但是没那么大

• 静态、手动的资源分配 • IAAS 也降低了对这个的需求。

• 对 docker 容器的直接接管能力都不行.

• 需要的功能都没有,没用的烂事一堆



第26页

CODING 实践 3 工具、实用、半自动

把有限的精力花在最需要的功能上



第27页

代码化的生产环境

• 记录什么东西跑在什么机器上 • 常用属性的的管理 • Jobs/Tasks 抽象层 • 集群可复制



第28页

半自动化操作

• ./coding-job up coding-mart

• 自动使用标准配置启动一个容器

• ./coding-job down coding-mart

• 自动干掉这个容器

• ./coding-job status coding-mart

• 监控容器的状态,内存等



第29页

高级自动化操作

• 执行 update 操作,会列出当前的 image 列表,选择后就可 以进行全自动更新。



第30页

未来还准备做的功能

• ./coding-job diff

• 在真的更新之前,先看看改了什么

• ./coding-job rolling-update

• Job/Tasks 抽象层可以帮助很快的批量操作一个服务

• ./coding-job web

• 方便网页化, 可以看 status, log, 甚至远程 shell 功能



第31页

CODING 实践总结

喊一些口号



第32页

三个关注点

• 软件架构的升级

• 微服务、无状态、数据执行分离

• 研发体系、环境管理理念的升级

• 容器化、代码化、自动化

• 资源管理理念的升级

• Pet Vs Cattle • 多留点富余量,迁移能力比压榨能力更重要



第33页

开发环境:定死接口,放手实现



第34页

生产环境容器化:关注三个重点



第35页

DEVOPS 切身实践



代码化

工具化



自动化



第36页

BUILD PACKAGE

RUN



可复制 挪的动 打成包



Q&A

代码化 工具化 自动化



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。