想用好 Docker ,你不能错过这些-阿里云开发者社区

开发者社区> 云原生> 正文

想用好 Docker ,你不能错过这些

简介: 如何在生产环境中使用 Docker? 如何平滑迁移到 Docker?Docker 技术在测试领域的应用体现在哪些方面?如何制作镜像?这里有你关心的问题,也欢迎留言引出更多的讨论

Docker 引起了交付方式的变革,从交付代码和文档变成交付Docker镜像乃至交付编排模板。

容器服务让我们可以专注应用本身功能的开发,而无需关注基础设施、应用部署、管理等等一大堆棘手的问题。


越来越多的公司开始考虑使用Docker的方式部署和管理应用,以降低运维的成本。

同时,阿里云容器服务团队正在积极的推进国内Docker的发展,阿里云在云栖大会上宣布和Docker公司战略合作,将为Docker Hub提供中国运营的基础服务


说易行难,真正开始的时候又不知道具体该做什么,会遇到哪些坑?

日前,阿里云容器服务团队进行了一次线上的圆桌互动,以下是提炼和总结


来自用户的总结:

个人理解:具体到 Docker 技术在测试领域的应用,可以体现在:

1)快速搭建兼容性测试环境

从Docker的镜像与容器技术特点可以预见,当被测应用要求在各类Web服务器、中间件、数据库的组合环境中得到充分验证时,可以快速地利用基础Docker镜像创建各类容器,装载相应的技术组件并快速启动运行,测试人员省去了大量花在测试环境搭建上的时间。

2)快速搭建复杂分布式测试环境

Docker的轻量虚拟化特点决定了它可以在一台机器上(甚至是测试人员的一台笔记本电脑上)轻松搭建出成百上千个分布式节点的容器环境,从而模拟以前需要耗费大量时间和机器资源才能搭建出来的分布式复杂测试环境。

3)持续集成

Docker可以快速创建和撤销容器,在持续集成的环境中,可以频繁和快速地进行部署和验证工作

精彩问答:

hyper_x问:如何平滑迁移到Docker ?合适的容器调度管理平台有推荐吗?多主机跨容器通信及性能问题怎么处理?容器的监控及故障迁移恢复怎么操作?

- 专家答:

迁移docker的时候,建议“慢慢来”,先把一些边缘的、无状态的应用放在容器里运行,核心服务先不动,稳定之后再逐渐开始迁移重要应用。

迁移过程中,可能会涉及到对应用访问模式的改造,在条件允许的情况下,比如业务压力不是这么大,可以做一些改造。比如两个应用原来是部署在一台机器上,通过unix domain socket通信,切换到Docker之后,推荐每个容器只跑一个应用,但是在过渡期,做一个大镜像,里面放两个应用也不是不可以


容器管理方面,目前主要三个方面:k8s, swarm和mesos,很难说哪个更好,您可以都尝试下。阿里云的容器服务采用的是swarm的模式,集成了阿里云的一些基础服务:日志、监控、存储等,在调度等方面做了很多优化,你也可以使用看看。

容器跨主机通信,Docker本身提供了overlay network,也有一些开源的软件 Flannel calico,按照底层网络模式分,overlay flannel weave等是vxlan的方式,需要对packet封装和解封,性能上差一些,calico 使用 BGP 协议直接路由,但是对底层的网络模型要求较高。容器服务提供了针对阿里云的VPC的 Docker 插件,容器之间的数据包不需要封装操作,性能几乎和VPC内两台ecs通信性能一样。

故障迁移和恢复,这个在容器服务中是原生支持的。监控方面可以参考下我们的帮助文档: https://help.aliyun.com/document_detail/32471.html


rg小恒问:

1.Docker的方便我觉得是敏捷交付以及持续集成,在对集群宿主机的资源利用上比虚拟主机方便一些,譬如容器迁移比vm迁移方便,我想问一下容器对于资源利用比直接跑在vm上是不是要好一些。

2.假如我的应用是基于tomcat的,挂载volume是用宿主机的磁盘好一些还是用nas,发布新版本(譬如更换war包)有什么好的方法,是我手动去替换volume里边的war包还是触发自动构建重新起一个tomcat容器,如果我只是想替换tomcat应用容器中的某些jsp文件呢
3.用阿云的容器服务的时候,集群默认会有etcd容器还是需要自己起一个

4.容器的监控是用阿云的监控即可还是需要自己另寻他路,譬如用谷歌的cadvisor等


- 专家答:

更细粒度的资源管理可以提高资源利用率,从物理机到虚拟机再到容器,资源的粒度在不断细化。一台VM上启动多个容器能更充分的利用VM的资源,配合云服务和自动调度等手段,可以进一步提供资源利用率和降低资源成本。

docker推崇的做法是不可变基础架构,变更的是镜像而不是容器内的文件,所以每次发布,要用新的war包构建一个新镜像,再用新镜像启动应用。即使不说容器,在Java Web开发里也不建议在生产环境里热更新JSP,生产环境要求的是可靠和高性能,替换jsp这种方式只能用在开发测试环境。

容器服务有etcd服务,但主要用于Docker daemon以及容器服务自身的agent,如果是您自己的业务上用到etcd,可以自己起一个。

监控方面,容器服务默认就支持了。您可以在控制台页面上查看每个容器的实时监控信息,这些数据也会自动同步到云监控,不需要额外配置。另外如果您自己有监控系统,也可以通过配置把所有的监控数据发送到您的监控系统里。可以参考监控的文档:https://help.aliyun.com/document_detail/32471.html


- 用户问:

有没有镜像制作的最佳实践可以参考?

- 专家答:

使用 Dockerfile 制作镜像,不要用 docker commit

Dockerfile放在一个专门的目录里,其中只包含制作镜像所需的文件(如果分离构建和镜像制作,这里只放构建后的包,不要放源码)。

必要的时候可以使用.dockerignore

减少层数量,Dockerfile 里用 RUN 的时候,一个RUN后面跟多个命令,命令之间用&&分割

经常变化的内容放在 Dockerfile 的后面,前面不变的部分可以直接用 Cache,降低 Build 镜像的时间。

更多内容欢迎关注 阿里云容器服务官方页面,https://www.aliyun.com/product/containerservice


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章