什么是容器
Docker官方对容器的解释,一句话概括,容器(Container)就是将软件打包成标准化单元,以用于开发、交付和部署。容器是打包代码及其所有依赖的软件的标准单元,使应用可以从一个环境快速可靠地运行到另一个环境。容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。容器赋予了软件独立性,将其与环境隔离开来,确保在例如开发和预演环境这种存在差异的环境中统一地运行。
容器也是一种用于打包应用(已编译)代码以及运行时所需依赖的技术。运行的每个容器可以重复,通过包含依赖项实现标准化意味着在任何环境运行容器都可以得到相同的行为。容器将应用与主机基础结构分离,使其在不同的云和操作系统环境部署更加容易。容器是不可变的,无法更改已运行容器的代码。如果一个容器化应用需要更改,则需要构建一个包含更改的新容器,从更新的镜像从新创建容器。
容器技术实质上是对系统资源的隔离和控制,使容器进程运行于属于自己的独立的命名空间(namespace)。容器可以拥有自己的文件系统、网络配置、进程空间等,容器内的进程是运行在一个隔离的环境里,使用起来就好像是在一个独立于宿主的系统下操作一样,也使得容器可以很方便的在任何地方运行。
容器的优点
容器的主要优点概括如下:
使用简单高效:与虚拟机镜像相比,容器镜像更易用、更高效。容器体积小启动快,不需要与外部的基础架构环境绑定,完美解决从开发到生产环境的一致性问题。
监测与管理:容器比虚拟机更加透明,有助于监测与管理。尤其是容器进程的生命周期由基础设施管理,而不是被进程管理器隐藏在容器内部。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。
持续集成和部署:容器消除环境差异,保证应用生命周期环境一致性和标准化。开发人员使用镜像实现标准开发环境构建,开发完成后封装完整环境和应用镜像,测试运维人员可以直接部署镜像进行测试和发布,简化了持续集成、测试和发布过程。
环境标准化与版本控制:基于容器提供的环境一致性和标准化,可以对容器镜像进行版本控制,即能够对整个运行环境进行版本控制,提供可靠与频繁的容器镜像构建、部署和快速简便的回滚。
资源高效利用与隔离:容器没有管理程序的额外开销,与底层共享操作系统,性能优良,系统负载低,在相同条件可以运行更多应用实例,可以充分利用系统资源。容器还拥有不错的资源隔离与控制能力,可以精确地分配系统资源,保证应用之间互不影响。
可观测:不仅显示操作系统的信息和度量,还显示应用自身的信息和度量。
云和操作系统分发可移植性:可运行在Ubuntu、RHEL、 CoreOS、物理机、GKE以及其他任何地方。
以应用为中心:从传统的硬件上部署操作系统提升到操作系统中部署应用程序。
松耦合、分布式、弹性伸缩和微服务:应用程序被分成更小,更独立的模块,并可以动态管理和部署,而不是运行在专用设备上的大型单体程序。
什么是Docker
Docker毫无疑问是从众多容器技术中脱颖而出的佼佼者,至于Docker具体是什么,通过下面几点总结:
Docker是一个开源容器项目,代码在GitHub维护,遵循Apache 2.0协议并已加入Linux基金会,受到主流操作系统以及云服务提供商支持,成立推动了开放容器联盟(OCI)。
Docker使用Google公司的Go语言进行开发实现,基于Linux内核的命名空间(namespace) 、控制组(cgroup)以及OverlayFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
Docker最初是基于Linux容器(LXC)实现,后来使用自己开发的libcontainer替代了LXC,然后进一步演化为使用runc和containerd。
Docker提供了高效、敏捷和轻量级的容器方案,可在容器内快速自动化部署应用,通过操作系统内核技术为容器提供资源隔离与安全保障,极大地简化了容器创建与维护,并支持部署到本地环境和多种云平台。换句话说,Docker为应用开发、运行和部署提供了一站式解决方案。
runc是一个Linux命令行工具,用于根据OCI容器运行时规范创建和运行容器。
containerd是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。
Docker的优势
作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。具体总结如下:
更高效的利用系统资源:容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高,需求量更小,可以实现更高的性能。一个相同配置的主机,使用容器可以比虚拟机运行更多数量的应用。
更快速的启动时间:Docker容器应用可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
一致的运行环境:Docker镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现同样的代码换个环境就无法运行这类问题。
持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员通过Dockerfile构建镜像并结合持续集成系统进行集成测试,运维人员可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署。
更轻松的迁移:Docker确保了执行环境的一致性,使得应用在不同平台之间的迁移更加容易,而不用担心运行环境的变化导致应用无法正常运行的情况。
更轻松的维护和扩展:Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。Docker还维护了一大批高质量官方镜像,进一步降低了应用服务的镜像制作成本。
良好的隔离性:Docker为容器提供了可靠的资源隔离与安全保障,使容器精确地分配系统资源,保证应用之间互不影响。
弹性伸缩:善于处理集中爆发的服务器使用压力,动态的管理应用。
《docker视频教学》