Py学习  »  docker

Docker 17.06社区版发布

Docker • 6 年前 • 765 次点击  

今天我们发布了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示例应用(https://github.com/dockersamples/atsea-sample-shop-app):



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
html>


Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

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的后期版本仍旧是支持的。


原文链接:https://blog.docker.com/2017/06/announcing-docker-17-06-community-edition-ce/


3 天烧脑式容器存储网络训练营


本次培训以容器存储和网络为主题,包括:Docker Plugin、Docker storage driver、Docker Volume Pulgin、Kubernetes Storage机制、容器网络实现原理和模型、Docker网络实现、网络插件、Calico、Contiv Netplugin、开源企业级镜像仓库Harbor原理及实现等。点击识别下方二维码加微信好友了解具体培训内容



点击阅读原文链接即可报名。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/PI1uW8kEyE
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2488
 
765 次点击