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


相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
18 4
|
5天前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
21 5
|
1天前
|
存储 持续交付 开发者
掌握Docker容器化:提升开发效率与应用部署
【10月更文挑战第4天】在现代软件开发中,Docker容器化技术因其轻量级、可移植和快速部署的特点,成为提升开发效率和简化部署流程的关键工具。本文介绍了Docker的基本概念、核心组件及其优势,并探讨了如何在开发环境中搭建、微服务架构及CI/CD流程中有效利用Docker,助力软件开发更加高效便捷。
|
4天前
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
17 3
|
2天前
|
监控 Kubernetes 测试技术
掌握Docker网络模式:构建高效容器通信
【10月更文挑战第3天】本文深入探讨了Docker的网络模式,包括它们的工作原理、使用场景以及如何配置和优化容器间的通信。希望能够帮助开发者在项目中有效地应用Docker网络模式,构建高效的容器化应用。
|
3天前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
17 1
|
6天前
|
Linux Docker 容器
docker启动完美容器的过程
本文详细介绍了使用Docker创建和管理容器的过程,包括拉取镜像、搜索镜像、创建容器、启动、停止、删除容器,以及查看容器日志和进程信息的常用命令。
17 2
|
6天前
|
Docker 容器
一个docker容器暴露多个端口
一个docker容器暴露多个端口
17 3
|
8天前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
|
3天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
23 0