敲黑板,划重点:Docker 1.13更新有哪些看点?

开工啦开工啦!告别热闹的春节,新的一年又开始了,数人云带着干货,与大家共勉^_^

Docker刚刚发布了1.13最新版,新添了很多特性让高可用服务的部署更加简单,同时也引入了一些命令和工作流程来改善Docker用户的开发体验。小伙伴可以在GitHub上看到完整的版本发布信息,本文为大家将更新的重点梳理出来,做一个总结。

调度更新

Docker1.13包含一些在Swarm Mode下运行服务的改进更新。现在可以给滚动更新的镜像打上摘要标识(比tag更特别),在镜像拉取时服务有了更好的记录,减少了记录中的噪声和日志垃圾。对于docker service logs实验性的支持也加进来,集群中运行服务的日志观察有了一个更简单的方式。

更新以后,在Swarm集群上调度的任务,出错后更容易发现,错误信息也更加明确。调度算法会更平均地分配同类型的任务。

假设有两个容器运行服务A,三个容器运行服务B。最坏的情况是在一个两节点的集群,所有运行A的容器被调度在一个节点,所有运行B的容器在另一个。如果一个节点挂了,其中所有的服务都会不可用。通过调整调度器可以避免此种类型工作负载分配的发生。

新的删除指令确保系统健康

如果大家像笔者一样,那么docker ps -a | grep 'Exited' | awk '{print $1}' | xargs docker rm(或者更极端的docker rm -f $(docker ps -aq))以及docker rmi -f $(docker images -q)都是些每天要用上几次的命令,来保证工作空间的整洁。

Docker1.13引入了prune命令,帮助确保系统健康,通过轻松删除无用资源减少Docker痕迹。运行docker system prune将会一键删除所有停止的容器,无用的镜像和网络volume。

如果你更喜欢rm命令,那也没关系,它们依旧工作,但是prune更简单。

全新的CLI

Docker在过去几年成长了许多,每次发布更新都为CLI添加了很多新鲜有趣的内容。然而,CLI快速发展导致很多Docker的新用户很难理解它。在Docker 1.13, CLI作出调整,聚焦于顶层资源的所有命令。最大的改变在于docker container作为容器的一个管理命令。旧的语法仍然可用,但是Docker鼓励用户开始使用新管理命令与CLI交互。

改进构建和缓存机制

缓存中毒是一个真正的威胁,从1.10版本开始,从远程镜像仓库使用镜像拉取时,Docker的新特性可以保护镜像免于缓存毒害。在1.10之前,在主机创建新镜像时,并不采用从远程登录拉取镜像层。它同样适用于从一个可信源拉取镜像。

在Docker 1.13,可以使用新的运行时标记--cache-from来指定你希望重建的镜像,使用的是从远程镜像仓库拉下来的镜像缓存。由你来决定镜像缓存是否可靠,从而远离缓存中毒。

此外,docker build有了两个新标记,--compress--squash。当Compress被发送到daemon,它会通过压缩build context提升镜像构建速度。--squash仍然处于实验阶段,它会把镜像压到一层,在一定程度上简化构建过程,但是如果你严重依赖缓存,可能会导致比较难以实现。

Docker Compose V3 语法

Docker 1.13包含一些全新的东西——一个升级和扩充的Docker Compose语法版本。我们把它称为V3,这套语法有点与众不同,因为它是用来将Docker服务部署到一个Swarm集群。它与V2有很多相同之处,但是应该被看做另一个DSL。

使用一个V3文件,可以通过docker stack deploy --compose-file=docker-compose.yml轻松部署到Swarm集群。V3语法可以帮助统一Docker Compose文件,在开发和生产环境轻松切换。如果你对V3的细节感兴趣,可以在GitHub repo docker/compose看其结构。

作者:Laura Frank 文章来源:https://blog.codeship.com/whats-new-docker-1-13/