Docker 1.12 重磅推出,容器领域划时代 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
daocloud
V2EX    程序员

Docker 1.12 重磅推出,容器领域划时代

  •  
  •   daocloud
    DaoCloud 2016-08-01 11:47:24 +08:00 5948 次点击
    这是一个创建于 3438 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Docker 1.12 在今年 6 月下旬的 DockerCon 2016 上就崭露头角,然而,却在 7 月底的今天才发布,真可谓"千呼万唤始出来"。如果了解 Docker 的 Roadmap ,就会发现此次大版本的变革,用“里程碑”和“划时代”来形容绝对不为过。总结而言,重大版本的亮点绝不容错过,归纳如下:

    • 原生支持编排功能, Swarm 集群蜕变为 SwarmKit ,融入 Docker Engine
    • 开发定义监控,支持 HEALTHCHECK ,拉近开发与运维距离,践行 DevOps 理念
    • VxLan 之外集成 MacVlan ,为满足容器网络落地,网络能力多样化
    • 容器负载均衡能力内核化, IPVS 的集成借力打力
    • 存储开始迈向分布式,存储生态迎来春天

    深入了解一个软件新版本的动向,往往可以借助版本的 ChangeLog ,下文将带领大家领略 Docker 1.12 版本相较之前的变化。从变化中嗅方向,从方向中探未来。

    镜像构建器

    • 在 Dockerfile 的定义规范中添加了新的指令“ HEALTHCHECK ”,用以支持用户定义的健康检查

    该功能直接允许开发者来定义自身程序的监控方式,完成应用的健康检查,弥合运维人员眼中监控与开发预期监控不匹配的鸿沟,此举将在监控领域给 DevOps 开启一盏明灯。

    • 在 Dockerfile 的定义规范中添加了新的指令“ SHELL ”,用以实现在 Dockerfile 中执行某个命令时,采用的具体 SHELL 类型
    • 在 Dockerfile 的定义规范中添加了新的指令 #escape= ,支持与平台架构相关的文件路径解析
    • 在".dockerignore"中添加对注释的支持
    • 在 Dockerfile 中添加对 UTF-8 格式的支持
    • 在 Dockerfile 和 .dockerignore 中选择忽略 UTF-8 BOM 字节的内容,如果存在的话。

    值得一提的是:该 BUG 的修复,源于 DaoCloud 公有云用户在使用镜像构建服务时,其 Github 代码仓库中的 Dockerfile ,是使用 Windows 平台上的 notepad 软件编辑而来,从而产生 UTF-8 BOM 。该用户通过运营工具 DaoVoice 第一时间反馈给 DaoCloud 工程师后, DaoCloud 迅速将该隐藏 BUG 汇报 Docker 社区并提交 PR 解决。

    Contrib

    • 为 CentOS 7 和 Oracle Linux 7 支持 seccomp
    • 在 systemd 单元中删除 MoutFlags 参数,以允许共享挂载传播

    镜像仓库 Distribution

    • 添加了两个 Docker Daemon 的运行参数 --max-concurrent-downloads--max-concurrent-uploads,使得下载镜像时,满足网络不支持多任务下载 /上传的场景。
    • 目前针对 Docker Registry 的所有操作都支持 ALL_PROXY 这个环境变量
    • 在用户执行 docker load 时, Docker Daemon 提供更多信息
    • 无论是下载还是上传的镜像,永远保存 registry 的镜像元数据

    日志

    • Syslog 日志驱动开始支持 DGRAM 套接字
    • docker logs 命令中添加 --details 选项,帮助用户获取日志标签
    • 使得 syslog 的日志收集器,可以获取环境变量与标签
    • 当创建容器时,继承 Docker Daemon 默认的日志参数
    • 在 syslog 的时间戳中添加一个额外的 syslog 格式选项 rfc5424micro,以便实现微秒解析
    • 从日志消息的标签中删除前缀 /docker,而是采用 {{.DaemonName}},这样的话可以保证让用户有权限来修改该前缀

    网络

    • 实现内嵌的虚拟 IP ,具体使用 IPVS 技术来完成,基于内部的负载均衡原则
    • 使用 ingress 的 overlay 网络实现路由网
    • 使用加密的 控制平面数据平面 ,来加强多节点 overlay 网络的安全性
    • 目前 libnetwork 的 MacVlan 驱动已经处于试验版本
    • docker network ls 命令中添加针对 driver 的过滤
    • docker ps --filter 命令中添加针对 network 的过滤
    • 为容器的 create,runnetwork connect 命令添加一个参数 --link-local-ip,以允许用户指定容器的内部连接地址
    • 添加网络标签过滤的支持
    • 在 Swarm-Mode 的 Overlay 网络模式中,删除了对外部 K/V 存储的依赖
    • 添加了容器的短 ID ,作为网络的默认别名
    • 修复了当使用生成的名字来重命名容器时存在的 DNS 问题
    • 同时允许 docker network inspect -f {{.Id}}docker network inspect -f {{.ID}} 来说明输出内容的不一致性

    试验性质的功能( experimental )

    • 实现新的plugin命令来管理各种插件,同时实现了该命令下的子命令 install,enbale,disable,rm,inspect,set

    Docker Engine API(v1.24) 以及 DockerCLI

    • 将原有的 docker 二进制文件,拆分为两个不同的二进制文件,分别为 docker(client) 以及 dockerd(daemon)
    • docker images --filter 命令添加两种类型的过滤筛选 beforeafter
    • docker search 命令添加了新的参数 --limit
    • docker search 命令添加了新的参数 --filter
    • docker info 的输出中添加了安全选项
    • docker info 的输出中添加了 insecure registry
    • 使用 TLS 用户信息,来扩展 Docker 的认证机制
    • devicemapper 方面,通过 docker info 展现 Thin Pool 的最小剩余空间
    • 目前 API 调用时,若 Docker Daemon 内部发生一个错误,则实现 API 返回一个 JSON 对象,使得 API 的实现更加一致
    • 避免了 docker run -i --restart 命令在 exit 时候经常会夯住的问题
    • 修复 API / CLI 之间关于主机名验证方面的差异
    • 修复 docker stats 命令关于内存展示的不一致性
    • 当请求被拒绝时,返回禁止返回码( 403 )
    • Windows 方面,修复了与 tty 相关的显示问题

    Docker Engine 运行时

    • 为 Docker Daemon 添加了一个 --live-restore 的参数,使得当 Docker Daemon 停止运行时,容器仍然可以保持运行,另外在 Docker Daemon 重新之后,又获取这部分容器的控制权
    • 添加了 OCI 兼容的容器运行时实现方案(通过 Docker Daemon 的 --add-runtime 参数来实现),同时可以在 createrun 命令中通过 --runtime 参数选择其中之一
    • 实现了新的镜像存储驱动 overlay2,该特性专门为 Linux 4.0+ 的环境服务,可以提供多种更为底层的目录实现
    • 实现新的 load 和 save 的镜像事件
    • 开始支持通过 systemd 来热加载 Docker Daemon 的配置参数
    • 为 btrfs 类型的存储驱动添加磁盘限额
    • 为 ZFS 类型的存储驱动添加磁盘限额
    • 支持在 docker run 命令中指定容器复用其他容器的 PID namespace :docker run --pid=container:<id>
    • 对齐默认 seccomp 文件中的被选择的能力( Capabilities )
    • 当 Docker Daemon 发生配置热更新时,实现事件 daemon reload
    • 在 Docker Daemon 运行过程中,在 pprof 中实现 trace 能力,用以显示进程的执行现状

    此 PR 的提交由 DaoCloud 的工程师提交, pprof 是 Golang 语言下非常方面的性能监控工具,此举可以有效提高 Docker Daemon 的运行时监控

    • 添加支持了 detach 事件
    • 为系统控制 sysctl 添加了 --sysctl 参数支持
    • docker rundocker create 命令中添加了参数 --storage-opt,以允许用户设置 devicemapper 的大小
    • 为 docker daemon 添加一个新的参数 --oom-score-adjust 并赋予默认值 -500,以保证在宿主机发生 OOM 状况时, docker daemon 和容器相比,容器更有可能被杀死
    • run,build,create,update 命令时,重新启动 -c 参数作为 --cpu-shares 的缩称
    • 在一次 eCryptfs 的挂载时,阻止使用 aufs 和 overlay 的存储驱动
    • 修复了 tmpfs 的挂载次序问题
    • 状态为 Created 的容器不再出现在 docker ps -a -f exited=0 命令的显示结果中
    • 修复了容器会始终处于 Removal In Progress 状态的问题
    • 当在 run / create 命令中没有指定命令时, HTTP 返回码改为 500 ,而不是 400
    • 修复了使用 --detach-keys 参数时的 BUG ,在这里当输入时 detach key 的一个前缀时,这种情况不会被保留
    • SELinux 标记功能会被自动禁用,假如容器开启了 Privileged 模式
    • 如果有 Volume 挂载进入一个容器,那么 /etc/hosts,/etc/resolv.conf,/etc/hostname 不再是 SELinux 标记的
    • 修复了 --tmpfs 和挂载参数之间的不一致
    • 修复了 Docker Daemon 在启动时有可能存在的夯住的问题
    • 在某些场景下,忽略 SIGPIPE 时间,从而防止 journald 重启时有可能造成的 daemon 崩溃
    • 修复了 docker stats 命令陈列容器发生错误时,容器不能被删除的 BUG
    • 修复了当 docker daemon 重启时,on-failure 重启策略失效的 BUG
    • 修复了当一个容器使用另一个容器网络时,docker stats 命令失效的 BUG

    编排功能 Swarm 模式

    • 实现了一个新的 swarm 命令来管理 swarm ,其中管理的子命令有 init,join,leaveupdate
    • 实现了新的 service 命令来管理与 swarm 相关的服务,其中实现的子命令有 create,inspect,update,removetasks
    • 实现了新的 node 命令来支持管理集群中的 Docker Engine ,其中实现的字命令有 accept,promote,demote,inspect,update,tasks,lsrm
    • 实现了试验性的两个命令 stackdeploy,用以管理部署多服务融合的分布式应用

    虽然 docker stack 命令目前仍然处于试验版本,但是 DaoCloud 的工程师已经在该功能中发现 Issue 并提交了不少 PR 。帮助 Docker 用户尽体验完善的容器编排 stack 功能。

    Volume 存储卷

    • 为存储卷 Volume 添加了范围属性 localglobal,和网络的范围属性类似
    • 允许存储驱动提供了一个 Status
    • 为存储卷添加 name/driver 的过滤支持
    • Mount / Unmount 操作会收到一个不透明的 ID ,来允许存储卷驱动曲风两个不同的调用者
    • 修复了在某种稀有场景下阻止删除存储卷 volume 的问题
    • Windows ,支持 host-path 的自动创建来匹配 Linux 的操作方式

    功能弃用

    Docker Daemon 的发展历程中,对于新功能的加入,和旧功能的删除都有着严谨的态度。对于即将弃用的功能, Docker 首先会将其设置为 deprecated,随后在过去的若干时间之内再将其移除,给予用户充足缓冲区的同时,也保证了代码的整洁程度。

    • 环境变量 DOCKER_CONTENT_TRUST_OFFLINE_PASSPHRASEDOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE 已经被重命名为 DOCKER_CONTENT_TRUST_ROOT_PASSPHRASEDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
    • 删除了日志选项 syslog-tag,gelf-tagfluentd-tag,从而支持更通用的 tag 日志选项
    • 删除了被弃用的功能, 也就是在 API 端,容器启动时传递 HostConfig 参数
    • 删除了 docker tag 命令中的 -f/--force 参数
    • 删除了被遗弃的 /containers/<id|name>/copy 的 URL
    • 弃用了 docker import 命令中老的三个参数的形式。
    15 条回复    2016-08-02 08:01:28 +08:00
    USCONAN
        1
    USCONAN  
       2016-08-01 12:31:07 +08:00
    OMG 。。 TLDR
    leopardwei
        2
    leopardwei  
       2016-08-01 12:45:16 +08:00
    学习中...
    adoyle
        3
    adoyle  
       2016-08-01 13:05:50 +08:00
    鼓掌
    shinko
        4
    shinko  
       2016-08-01 13:31:14 +08:00
    听说 Docker 是从 lxc 出来的,最近发现 lxc 好好用啊。 Docker 还没接触
    kideny
        5
    kideny  
       2016-08-01 14:42:24 +08:00
    听王垠大师说, shell 这样的语言也能开发出 docker 这样的工具。从此以后,觉得 docker 也不过如此。。。
    chenwl
        6
    chenwl  
       2016-08-01 15:07:21 +08:00
    @kideny 这么“迷信”人。。。搞出东西是真了不起,只是口头的我们只会回敬奉承。
    ais
        7
    aisk  
       2016-08-01 15:11:31 +08:00
    @kideny 王垠大师原意是想黑一把 go ,结果被你解读成了黑 docker 。
    aisk
        8
    aisk  
       2016-08-01 15:13:08 +08:00   1
    @kideny 你知道吗,只用四个碱基对就可以实现地球上任何生命,是不是觉得地球生命也不过如此了?
    xjtlujoe
        9
    xjtlujoe  
       2016-08-01 15:20:48 +08:00
    尝试学习 docker 好久,还是没入门。。
    knightdf
        10
    knightdf  
       2016-08-01 15:39:55 +08:00
    昨天装了个准备玩玩
    zacard
        11
    zacard  
       2016-08-01 17:03:48 +08:00
    nice
    mahone3297
        12
    mahone3297  
       2016-08-01 17:22:23 +08:00
    @aisk 》你知道吗,只用四个碱基对就可以实现地球上任何生命,是不是觉得地球生命也不过如此了?
    哈哈,这个反驳说的好!有点意思。
    Owenjia
        13
    Owenjia  
       2016-08-01 17:47:48 +08:00
    升到 1.12.0 之后启动报错:`Your kernel does not support cgroup blkio ... ... `,
    明明 BLK_CGROUP 是开启了的……搜索了下,没找到解决方案,只好先退回 rc4 了。
    9hills
        14
    9hills  
       2016-08-01 17:53:29 +08:00
    另外, Mac 版 Docker 大改版,使用体验提升
    windyboy
        15
    windyboy  
       2016-08-02 08:01:28 +08:00
    相对于 docker ,我现在更感兴趣的是 mesos
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2497 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 15:34 PVG 23:34 LAX 07:34 JFK 10:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86