Docker 17.06 社区版发布

· · 496 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

今天我们发布了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示例应用

Docker 17.06 社区版发布

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数据而不需要丢失所有的设置

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

Docker 17.06 社区版发布

为主机添加一个实验性的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 rel="external nofollow" target="_blank" href="http://nginx.org/" >nginx.org</a>.<br/>
Commercial support is available at
<a rel="external nofollow" target="_blank" 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)(翻译:钟最龙)

关注本站微信公众号(和以上内容无关)InfraPub ,扫码关注:InfraPub

496 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传