系列文章目录
容器学习Day02-VMware Workstation安装Ubuntu
文章目录
前言
随着容器技术的迅速发展,开发者已经由传统的虚拟机方式开始转向容器技术,为了适应潮流,咱也来学习一下,在这里记录下自己的学习笔记。
一、容器是什么
容器来源于英文中的 container 一词,也就是集装箱的意思,当然我们这里说的容器并不是集装箱。容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。所谓“视图隔离”就是能够看到部分进程以及具有独立的主机名等,控制资源使用率则是可以对于内存大小以及 CPU 使用个数等进行限制。容器就是一个进程集合,它将系统的其他资源隔离开来,具有自己独立的资源视图。
二、容器的发展
我们现在称为容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将 FreeBSD 系统分区为多个子系统(也称为 Jail)。Jail 是作为安全环境而开发的,系统管理员可与企业内部或外部的多个用户共享这些 Jail。
2001 年,通过 Jacques Gélinas 的 VServer 项目,隔离环境的实施进入了 Linux 领域。在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样。
很快,更多技术结合进来,让这种隔离方法从构想变为现实。控制组(cgroups)是一项内核功能,能够控制和限制一个进程或多组进程的资源使用。而 systemd 初始化系统可设置用户空间,并且管理它们的进程,cgroups 使用该系统来更严密地控制这些隔离进程。这两种技术在增加对 Linux 的整体控制的同时,也成为了保持环境隔离的重要框架。
三、Docker容器技术
1、认识Docker
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
Docker官网地址:Home - Docker
2、Docker架构
Docker 使用客户端-服务器(C/S)架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统,比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
- 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。
- Docker主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
3、Docker与传统虚拟化
虚拟机具有完整的操作系统,其自身的内存管理通过相关的虚拟设备进行支持。 在虚拟机中,为用户操作系统和虚拟机管理程序分配有效的资源,从而可以在单台计算机(或主机)上并行运行一个或多个操作系统的多个实例。 每个客户操作系统都作为主机系统中的单个实体运行。
Docker容器是使用Docker引擎而不是管理程序来执行的,因此容器比虚拟机小。并且由于主机内核的共享,可以更快地启动,具有更好的性能,更少的隔离和更好的兼容性。 Docker容器能够共享一个内核并共享应用程序库,因此容器比虚拟机具有更低的系统开销,只要用户愿意使用单一平台来提供共享的操作系统,容器可以更快,更少资源。虚拟机可能需要几分钟才能创建并启动,而只需几秒钟即可创建并启动一个容器。与在虚拟机中运行应用程序相比,容器中包含的应用程序提供了卓越的性能。
由于docker不需要hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此CPU、内存利用率上docker将会在效率上有明显优势。当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
特性 | 容器 | 虚拟机 |
启动速度 | 秒甚至毫秒 | 数秒至几十秒 |
系统内核 | 共享内核 | 不共享内核 |
隔离性 | 进程级别隔离 | 系统资源级别隔离 |
资源消耗 | 很小 | 较多 |
运行数量 | 单机可运行上千 | 一般几十个 |
迁移性 | 优秀 | 一般 |
4、Docker的使用场景
⭐Web应用的自动化打包和发布。
⭐自动化测试和持续集成、发布。
⭐在服务型环境中部署和调整数据库或其他的后台应用。
⭐从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
总结
以上就是今天学习了解的内容,后面准备虚拟机环境进行系统的学习。