想用好 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


相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
缓存 前端开发 Docker
Docker Layer Caching:加速你的容器构建
Docker Layer Caching:加速你的容器构建
|
4月前
|
运维 持续交付 开发者
Docker:重塑现代应用开发的容器革命
Docker:重塑现代应用开发的容器革命
|
4月前
|
运维 持续交付 开发者
Docker:现代应用开发的容器化革命
Docker:现代应用开发的容器化革命
|
2月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
352 5