本文探讨了Docker的作用和它在解决现代软件开发中的痛点方面的重要性。了解Docker如何提供轻量级、可移植和可扩展的容器化解决方案,简化了应用程序的部署、管理和跨环境移植。
1. 移植性, 一次构建到处使用
假如有一个服务器a运行了很多项目(node、java、php、mysql)。有一天需要使用新的服务器b。
那么服务器a上的所有运行的项目都得迁移到服务器b上,那么需要给服务器b搭建各种运行环境,工作量耗时耗力。
使用docker将所以的项目以及运行环境进行镜像构建,只需要在另一个服务器上安装一个docker,并下载对应之前构建好的镜像,就能快速搭建出对应的运行环境,并将项目运行起来。
2. 隔离性, 不同的容器之间相互独立,互不干扰
Docker通过namespace实现隔离的,namespace是Linux提供的资源隔离机制,负责隔离进程。只有在同一个namespace下的进程可以相互联系,但无法感受到外部进程的存在,营造出处于一个独立的系统环境中的错觉。
因为namespace不管再怎么隔离,但是容器内部执行任务都依赖同一个cpu、内存等。为了防止容器过度占用或影响其他容器或宿主机,需要限制容器使用的 CPU 核心数量、内存大小,或者设置容器的网络带宽限制,以确保容器之间的资源使用互不干扰。因此使用了控制组(Control Groups,简称cgroups)是一个 Linux 内核特性,它可以为进程或进程组分配资源,并限制其资源使用量,确保系统的资源公平分配和高效利用。
3. 轻量, docker是一种虚拟化容器技术。
他和虚拟机最根本的区别是:docker容器和宿主机共用操作系统内核,不会在宿主机上再次安装操作系统,更加节省资源。
4. 启动快
docker采用了一种镜像分层模型,通过这种模型可以实现镜像之间的共享和重用,启动容器时无需加载整个镜像层,所以启动会更快。