docker 是什么?
docker 是什么?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux内核的机器上,也可以实现虚拟化。Docker 镜像可以推送到存储库,也可以下拉到任何其他主机以从该镜像运行容器。
背景
切换环境的时候,由于环境变化导致部署出问题。为了避免这种情况就诞生了容器技术,相比虚拟机,更加节约资源,虚拟机是把硬件资源分割,操作系统隔离。
前提容器是什么
用户空间(user space):运行用户程序(应用程序、进程)所需的所有代码被称为用户空间。当启动程序操作时,例如创建一个文件,用户空间中的进程会向内核空间发出系统调用。
内核空间(kernel space):这里有着与系统硬件、存储等交互的内核代码,是操作系统的核心。
容器基本上是一个具有足够隔离用户空间组件的进程,因此它给人一种独立操作系统的感觉。Linux 有两个重要的内核功能,分别是命名空间(namespaces)和控制组(control groups)。在主机中,容器与容器之间的隔离正是由这两个内核功能实现的。
docker对比虚拟机
资源利用和成本
- 我们可以使用虚拟机独立运行应用程序,这里所谓的独立运行是指一台虚拟器运行一个服务。但是虚拟机仍然可能未被充分利用。此外,为应用程序调整虚拟机的大小并不是一件容易的事。
- 另一方面,容器可以在非常小的 CPU 和内存上运行。此外,您甚至可以在 VM 内运行多个容器以进行应用程序隔离。另外,调整容器大小需要几秒钟。
配置和部署
- 取决于所涉及的工作流,配置虚拟机并在其上部署应用程序可能需要几分钟到几小时的时间,即使回滚也需要时间。
- 但是我们却可以在几秒钟内部署一个容器,并在几秒钟内将其回滚。
漂移管理
虚拟机中的漂移管理并不容易。我们需要拥有成熟的自动化和流程,以确保所有环境都相似。遵循不可变的部署模型可避免虚拟机环境中的漂移。
对于容器,一旦镜像生成,那么它在所有环境中都是一样的。要进行任何更改时,我们需要开始在 dev env 中进行更改并重新生成容器映像。
docker 容器和Linux容器区别(LXC)
Docker 最初是构建在 Linux 容器 (LXC) 之上的,但后来 Docker 用自己的容器运行时 libcontainer(现在是runc 的一部分)替换了 LXC。
启动 docker 容器非常快速,只需不到一秒钟,而且 Docker 可以在任何具有兼容 Linux 内核的主机上运行。(也支持 Windows)

