Docker 17.06 社区版发布

今天我们发布了Docker CE 17.06,它包含了诸多新特性、优化和bug修复。我们在四月份的DockeCon上公布了Moby项目,Docker CE 17.06是第一个完全构建在它基础上的Docker版本。变更日志中能看到完整的更新列表,我们来看看它的一些新特性。

我们也为这篇文章制作了一个视频版本。

多阶段构建

17.06 CE最大的特性是它的多阶段构建(multi-stage builds),它最初在四月的DockerCon被公布,现在已经达到了稳定版本。多阶段构建能从一个Dockerfile中构建出更加简洁、体积更小的Docker镜像。

多阶段构建通过构建过渡镜像并产生输出。这样就能在一个过渡镜像中编译代码,在最终的镜像中只使用它的输出。例如,Java开发者通常使用Apache Maven来构建应用,但是运行应用却不需要Maven。多阶段构建能大幅度的减小镜像的体积:

REPOSITORY          TAG                 IMAGE ID                CREATED              SIZE
maven               latest              66091267e43d            2 weeks ago          620MB
java                8-jdk-alpine        3fd9dd82815c            3 months ago

来看一个能创建店铺首页的AtSea示例应用

(adsbygoogle = window.adsbygoogle || []).push({});

AtSea使用了多阶段构建,并包含两个过渡阶段:用一个node.js基础镜像构建ReactJS应用,用一个Maven基础镜像将Sprint Boot应用编译成单个镜像。

FROM node:latest AS storefront
WORKDIR /usr/src/atsea/app/react-app
COPY react-app/package.json .
RUN npm install
COPY . /usr/src/atsea/app
RUN npm run build

FROM maven:latest AS appserver
WORKDIR /usr/src/atsea
COPY pom.xml .
RUN mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve
COPY . .
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests

FROM java:8-jdk-alpine
WORKDIR /static
COPY --from=storefront /usr/src/atsea/app/react-app/build/ .
WORKDIR /app
COPY --from=appserver /usr/src/atsea/target/AtSea-0.0.1-SNAPSHOT.jar .
ENTRYPOINT ["java", "-jar", "/app/AtSea-0.0.1-SNAPSHOT.jar"]
CMD ["--spring.profiles.active=postgres"] 

最终的镜像大小只有209M,其中不包含Maven或node.js。

还有其他的一些构建器方面的优化,包括在FROM指令中使用构建时参数。

日志和指标

指标

目前通过一个daemon的API端点提供日志的支持。可以将docker的/metrics端点暴露给插件:

$ docker plugin install --grant-all-permissions cpuguy83/docker-metrics-plugin-test:latest
$ curl http://127.0.0.1:19393/metrics

这个插件仅用于示范。它在主机的网络上运行了一个反向代理,能将请求转发给插件中的本地的指标套接字。在真实场景中,可能会将收集的指标数据发送给外部的服务,或者使它可以被一个服务如Prometheus访问并收集。

注意尽管指标插件在非实验性的daemon中可以使用,指标标签(metrics label)仍应该被看作是实验性的,可能在Docker未来的版本中发生改动。

日志驱动插件

添加了对日志驱动器插件的支持。

Service日志

docker service logs从实验版本改进到了稳定版,你可以轻松地获取Swarm上运行的一个服务的完整日志。同时也添加了服务中单个任务日志的端点。

网络

Service中节点本地的网络支持

Docker支持很多的网络选择。在Docker 17.06 CE中,可以将服务追加到节点本地的网络(node-local networks)。这包括如Host、Macvlan,IPVlan,Bridge和本地作用域的插件。例如对于一个Macvlan网络,可以在worker节点上创建一个节点特定的网络配置,然后在manager节点上创建一个加入了这些配置的网络:

[Wrk-node1]$ docker network create —config-only —subnet=10.1.0.0/16 local-config
[Wrk-node2]$ docker network create —config-only —subnet=10.2.0.0/16 local-config
[Mgr-node2]$ docker network create —scope=swarm —config-from=local-config -d macvlan mynet
[Mgr-node2]$ docker service create —network=mynet my_new_service

Swarm Mode

Swarm mode添加了很多的新特性,这里是一部分:

配置对象

swarm mode的一个新的配置对象,允许安全地像传递密码一样传递配置信息:

$ echo "This is a config" | docker config create test_config -
$ docker service create --name=my-srv —config=test_config …
$ docker exec -it 37d7cfdff6d5 cat test_config
This is a config

证书轮换的优化

Swarm mode中内置的公钥基础设施(PKI)系统使得可以安全地部署一个容器调度系统。Swarmz中的节点使用双边TLS来认证、授权和加密他们之间,以及和Swarm其他节点的通讯。因为这些都依赖于证书,所以经常轮换很重要。自从Swarm mode伴随Docker 1.12发布以来,已经能以一小时一次的频次来安排证书轮换。有了Docker CE 17.06,添加了立即强制证书轮换的一次性操作:

docker swarm ca --rotate

Swarm Mode事件

docker events可以用来从Docker中获取实时的信息。在编写自动化和监控应用时很有用。但是直到Dcoker CE 17.06,都不支持swarm mode的事件。现在docker events将会返回服务、节点、网络和和secret的信息。

专用的数据路线

docker init中添加了新的–datapath-addr标签,可以把swarm mode的管理任务和应用传递的数据隔离开来。这能把集群从IO贪婪的应用中拯救出来。如你用这种方式初始化集群:

docker swarm init —advertise-addr=eth0 —datapath-addr=eth1

集群管理的流量(Raft、grpc和gossip)将会通过eth0,而服务将会彼此通过eth1来通讯。

桌面版本

Docker for Mac和Docker for Windows添加了三个新特性:

GUI中新增了重置Docker数据而不需要丢失所有的设置

现在重置数据不会丢失设置。

为主机添加一个实验性的DNS

如果在Docker for Mac或者Docker for Windows上运行容器,并且想访问其他的容器,你可以使用一个新的实验性主机:docker.for.mac.localhost和docker.for.win.lcoalhost来访问开放的端口。例如:

$ docker run -d -it -p 80:80 nginx
9a41b199e86cc4730f470aba1091530cfdc26d6f956964492b0d0b06a0ab9046
$ docker run -it curlubuntu
root@85664afff468:/# curl docker.for.mac.localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
    width: 35em;
    margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@85664afff468:/#

用来认证注册表访问的登录证书

可以在Docker for Mac和Docker for Windows中添加证书来访问注册表,而不仅仅是使用用户名和密码。这能让访问Docker Trusted Registery和开源的注册表和其他任何的注册应用快速而简单。

云版本

Cloudstor卷插件可以在Docker for AWS和Docker for Azure中使用。在Docker for AWS中,对于持久化卷(对于全局的EFS和可添加的EBS)的支持现在是稳定的了)。并且我们能跨可用区支持EBS卷。

对于Docker for Azure来说,我们现在支持部署到Azure Gov,通过Cloustor支持持久性卷现在是稳定的,可以通缉你广化寺用在Azure Public和Azure Gov中。

废弃

在dockerd的命令行中,–api-enable-core标识已经被废弃很久了,而采用–api-cors-header。对于–api-enable-cors还没有完全去掉。

Ubuntu 12.04 “precise pangolin”已经完结了生命周期,所以它现在不是Docker支持的操作系统。Ubuntu的后期版本仍旧是支持的。

下一步

要体验这些新特性:

原文链接:ANNOUNCING DOCKER 17.06 COMMUNITY EDITION (CE)(翻译:钟最龙)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大魏分享(微信公众号:david-share)

Openshift-F5集成(南北流量走F5)

1812
来自专栏HaHack

Dockerize Your Hexo

1554
来自专栏跟我一起学Docker

第二章 Docker环境安装

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实...

2133
来自专栏同步博客

Docker之进入容器(三)

  经过前面两篇博客的扫盲,大家多多少少对docker有了一个基本的了解,也接触了docker的常用命令。在这篇博客中,我将介绍进入docker容器的几种方式。

1383
来自专栏marsggbo

OpenShift的容器映像(第3部分):使你的映像可用

这是我在2017年欧洲、中东和非洲(EMEA)红帽技术交流会议上的一个会议记录,该会议集合了EMEA所有红帽解决方案架构师和顾问。它主要讨论在创建运行于Open...

2229

构建远程缓存系统

上个月,我们的工程团队发布了一个大的更新,关于在使用我们的Docker平台Jet时Docker镜像是如何被缓存和存储的。在本文中,我们将讨论更新的动机,特性的设...

2326
来自专栏云鼎实验室的专栏

ShadowBrokers 方程式工具包浅析

臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit.com博客上提供了相关消息。本次被公开的工具包大小为117.9MB,包含...

2.4K0
来自专栏jeremy的技术点滴

试用docker功能

3677
来自专栏云计算

容器技术概述

容器 (Container) 是一种在资源隔离状态下,允许我们运行应用程序及其依赖项,操作系统层面的轻量级、虚拟化技术。在容器中,应用程序运行所依赖的必要组件都...

2236
来自专栏FreeBuf

格盘也没用:Hacking Team使用UEFI BIOS Rootkit将远控长驻操作系统

上周Hacking Team 400G泄露数据在市面上疯传,已有3枚Flash 0day漏洞和一枚Android漏洞被曝光,而本周趋势科技的研究人员又有了重大发...

3696

扫码关注云+社区

领取腾讯云代金券