docker
了解docker
容器基本上是一个具有足够隔离用户空间组件的进程
Docker 基本上就是一个容器引擎,它使用 Linux 内核功能(如命名空间和控制组)在操作系统之上创建容器。
例如,如果有一个 Java jar 文件,我们可以在任何安装了 java 的服务器上运行它。同样的,一旦使用 Docker 将容器与所需的应用程序打包在一起,我们就可以在任何其他安装了 Docker 的主机上运行它。
Docker 与容器的区别
Docker 是一种为高效管理容器而开发的一种技术或工具。
我可以在没有 Docker 的情况下运行容器吗?
当然可以。我们可以使用 LXC 技术在 Linux 服务器上运行容器。
关于 Docker,我们应该要清楚:
- Docker 不是 LXC
- Docker 不是虚拟机解决方案。
- Docker 不是配置管理系统,也不是chef, puppet, Ansible 等工具的替代品。
- Docker 不是一种平台即服务的技术。
优点
Docker 有一个高效的工作流程,可以将应用程序从开发环境转移到测试环境、再转移到生产环境。当我们在实际完成将应用程序打包到 Docker 映像的一个操作时,会对它有更深的了解。
启动 docker 容器非常快速,只需不到一秒钟,而且 Docker 可以在任何具有兼容 Linux 内核的主机上运行。(也支持 Windows)
注意:我们不能在 Linux 主机上运行 Windows 容器,因为 Windows 没有 Linux 内核支持。点击此处,可以阅读有关 Windows 容器的信息。
Docker 使用写时复制联合文件系统( Copy-on-write union file system )来存储图像。每当对容器进行更改时,只会使用写时复制模型将更改写入磁盘。使用写时复制,我们优化了所有容器的共享存储层。
Docker组件
Docker 由以下几个组件组成:
- Docker 守护进程 (dockerd)
- Docker 客户端
- Docker 镜像
- Docker 注册表
- Docker 容器
为什么容器比虚拟机好?
与虚拟机相比,容器具有一些重要优势,接下来让我们来一一看看这些优势。
资源利用和成本
- 我们可以使用虚拟机独立运行应用程序,这里所谓的独立运行是指一台虚拟器运行一个服务。但是虚拟机仍然可能未被充分利用。此外,为应用程序调整虚拟机的大小并不是一件容易的事。
- 另一方面,容器可以在非常小的 CPU 和内存上运行。此外,您甚至可以在 VM 内运行多个容器以进行应用程序隔离。另外,调整容器大小需要几秒钟。
配置和部署
- 取决于所涉及的工作流,配置虚拟机并在其上部署应用程序可能需要几分钟到几小时的时间,即使回滚也需要时间。
- 但是我们却可以在几秒钟内部署一个容器,并在几秒钟内将其回滚。
漂移管理
- 虚拟机中的漂移管理并不容易。我们需要拥有成熟的自动化和流程,以确保所有环境都相似。遵循不可变的部署模型可避免虚拟机环境中的漂移。
- 对于容器,一旦镜像生成,那么它在所有环境中都是一样的。要进行任何更改时,我们需要开始在 dev env 中进行更改并重新生成容器映像。
基本概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
镜像是静态的,容器是动态。一个镜像可以运行多个容器
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 子非鱼!
评论