一、云计算带来的问题
学 Docker 肯定是有一定的目的性,而这些目的也是为了解决一系列的问题,衍生出这些问题的罪魁祸首就是“云计算”。
随着云计算的到来( AWS 的成功),引导开发者将应用转移到云上,虽然解决了硬件管理的问题,然而中间件相关的问题依然存在。
从各种 OS 到各种中间件到各种 app , 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。而为了节省成本,一般会采用虚拟化手段来满足用户按需所用的需求以保证可用性和隔离性,但是一个 OS 再小也是很大的。
这种虚拟化解决方案其实也有很多,比如:Xen、KVM、LXC(LinuX Containers) 等。这里的 Xen、KVM 虽然可以虚拟出一个很好的 OS,但是占用的资源还是太大。
接着我们再来看一下 LXC
LXC(LinuX Containers)Linux容器,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
而接下来我们要说的 Docker,就是根据 LXC 进行革新,解决了上述云计算带来的这些问题。
二、认识 Docker
我们通过百度百科先来简单了解一下 Docker
可以看到,Docker 其实就是一个容器引擎,而我们开发者通过打包我们的应用到一个镜像中之后,就可以发布到任何流行的 Linux 或者 Windows 系统上。并且这个容器完全是沙箱机制,相互不会有任何接口(更重要的是容器性能开销极低)。
Docker 官网地址:Empowering App Development for Developers | Docker
Docker LOGO
!!!这里还要说一句,Docker 对于个人是免费的,但是对于一些企业并不是,来看一下官网原话
Professional use of Docker Desktop in large organizations (more than 250 employees or more than $10 million in annual revenue) requires users to have a paid Docker subscription. While the effective date of these terms is August 31, 2021, there is a grace period until January 31, 2022, for those that require a paid subscription. For more information, see the blog Docker is Updating and Extending Our Product Subscriptions.
价格
Docker 从 17 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们这里用的是社区 CE 版本。
三、Docker 架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
序号 | ||
1 | Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
2 | Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
3 | Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
4 | Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
5 | Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
6 | Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
四、Docker 与 虚拟机的区别
我们来看上面的这两个图,左面的图为之前的虚拟机架构,右面的为 Docker 架构。
首先来看共同的地方:
Server:这个表示真实电脑;
Host OS:真实电脑的操作系统,例如:Windows,Linux 等;
接着先来看左面的虚拟机:
Hypervisor:虚拟机平台,模拟硬件,如 VMWare,VirtualBox 等
Guest OS:虚拟机平台上安装的操作系统,例如 CentOS、Debian 等
App:虚拟机上的应用,例如 Nginx、Redis 等
接着再来看右面的 Docker:
Docker Engine:新一代虚拟化技术,不需要包含单独的操作系统。
App:所有的应用程序现在都作为 Docker 容器运行。
这种体系结构的明显优势是,不需要为虚拟机操作系统提供硬件模拟。所有应用程序都作为Docker容器工作,性能更好。
这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com