1 Docker 概念
Docker 是供开发人员和系统管理员 使用容器构建,共享和运行应用程序的平台。使用容器
来部署应用程序称为容器化。容器不是新的,但用于轻松部署应用程序的容器却是新的。
容器化越来越受欢迎,因为容器是:
灵活:即使最复杂的应用程序也可以容器化。
轻量级:容器利用并共享主机内核,在系统资源方面比虚拟机更有效。
可移植:您可以在本地构建,部署到云并在任何地方运行。
松散耦合:容器是高度自给自足并封装的容器,使您可以在不破坏其他容器的情况下更换或
升级它们。
可扩展:您可以在数据中心内增加并自动分发容器副本。
安全:容器将积极的约束和隔离应用于流程,而无需用户方面的任何配置。
2 Docker 的用途
Docker 的主要用途,目前有三大类。
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
3 映像 和容器( ( Images and containers) )
从根本上说,一个容器不过是一个正在运行的进程,并对其应用了一些附加的封装功能,以使其与主机和其他容器隔离。容器隔离的最重要方面之一是每个容器都与自己的私有文件系
统进行交互。该文件系统由 Docker 映像提供。映像包括运行应用程序所需的所有内容-代码或二进制文件,运行时,依赖项以及所需的任何其他文件系统对象。
4 容器和虚拟机( ( Containers and virtual machines) )
容器在 Linux 上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。
相比之下,虚拟机(VM)运行成熟的“来宾”操作系统,并通过虚拟机管理程序对主机资源进
行虚拟访问。通常,VM 会产生大量开销,超出了应用程序逻辑所消耗的开销。
4.1 虚拟机
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运
行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,
因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,
不需要了就删掉,对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。
- 资源占用多
虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪
怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才
能运行。 - 冗余步骤多
虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。 - 启动慢
启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
4.2Linux 容器
由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,
缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外
面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现
与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。
- 启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容
器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。 - 资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。 - 体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文
件要小很多。
总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
5协调器( ( Orchestration) )
容器化过程的可移植性和可重复性意味着我们有机会跨云和数据中心移动和扩展容器化应用程序;容器有效地保证了这些应用程序将在任何地方以相同的方式运行,从而使我们能够
快速,轻松地利用所有这些环境。此外,随着我们扩大应用程序的规模,我们将需要一些工具来帮助自动维护那些应用程序,能够自动替换发生故障的容器,并管理这些容器在其生命
周期中的更新和重新配置。
参考官方文档: https://docs.docker.com/get-started/