1.3.4 为什么使用Docker
1.容器化应用面临的挑战
(1)容器化应用本质上还是各自独立的,一个应用系统的存在需要注册服务应用、登录服务应用、数据库应用、缓存应用等。
(2)如何让它们精密配合使用和互相访问?
(3)如何管理容器镜像,比如保存myql镜像?
(4)如何确保下载官方的mysql镜像时,在下载过程中镜像没有被篡改?
(5)原本Linux系统中有用于启动停止服务的机制、监控侦听、轮换日志文件的方式来确保服务的稳定运行,但是容器隔离了Linux系统。如何对容器应用进行监控侦听来确保稳定运行?
2.Docker具备的优势
(1)统一的管理服务。
使用Docker部署的应用,都会在Docker的管理范围之内。这也是Docker的另一个优点(第一个是标准化),它提供了一种隔离的空间,把服务器上零散的部署应用集中起来进行管理。
比如未使用Docker时,一个服务器上部署了多个服务,如mysql、redis、rabbitmq等。如果有一天服务器突然断电重启了,那些没有设置自动重启的应用、重启出现问题的应用,以及某些甚至都不知道隐藏在某个角落里的重要应用启动没有成功怎么办?
但使用Docker后,一眼就可以看出哪些应用正常启动了,哪些应用出问题了,然后进行处理即可。
(2)更高效的利用系统资源。
由于容器不需要进行硬件虚拟及运行完整操作系统等额外开销,Docker对系统资源的利用率更高,无论是应用执行速度、内存消耗还是文件存储速度,都比传统虚拟机技术更高效。
因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。Docker容器的运行不需要额外的Hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
(3)更快速的启动时间。
传统的虚拟机技术启动应用服务往往需要数分钟,而由于Docker容器应用直接运行于宿主内核,无须启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大节约了开发、测试、部署等过程中的时间。
(4)一致的运行环境。
开发过程中一个常见的问题就是环境一致性问题,由于开发环境、测试环境和生产环境不一致,导致某些bug并未在开发过程中被发现,而Docker的镜像功能提供了除内核外完整的运行时环境,确保了应用运行环境一致性,不会再出现这类问题。
(5)持续交付和部署。
对于开发和运维人员来说,希望一次性完成创建或配置后,就可以在任意地方正常运行。使用Docker可以通过定制应用镜像来实现持续集成、持续交付和持续部署。
开发人员可以通过Dockerfile进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署。
(6)更轻松的迁移。
由于Docker确保了执行环境的一致性,使应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是比较版本,其运行结果都是一致的,因此用户可以很轻易地将一个平台上运行的应用迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行。
(7)更轻松的维护和扩展。
Docker使用的分层存数及镜像技术,可以使应用重复部分的复用更为容易,也使应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。
此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境中使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本。