目录
一、容器概念介绍
1. 什么是容器?
容器(container)是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。容器的本质是进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。它是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。
2. 容器与虚拟化
虚拟化环境中,无论是在本地还是云端,都使用虚拟机管理程序来虚拟化物理硬件。 每个虚拟机都包含一个访客操作系统、操作系统运行所需硬件的一个虚拟副本以及一个应用及其关联的库和依赖项。容器不需要虚拟化底层硬件,而是要虚拟化操作系统(通常是 Linux),因此每个单独的容器只包含应用程序及其库和依赖项。 由于缺少访客操作系统,容器才如此轻量,因此速度快且可移植。
3. 容器优势
- 轻量: 容器会共享机器操作系统内核,由于无需在每个应用程序中包含完整的操作系统实例,因此容器文件较小且易于访问资源。 容器体积小,尤其是与虚拟机相比,这意味着容器可以快速启动并更好地支持横向扩展的云原生应用程序。
- 可移植且独立于平台: 容器会携带其所有依赖项,这意味着软件一旦编写完毕就可以运行,而无需在笔记本电脑、云和本地计算环境中对其进行重新配置。
- 支持现代开发和架构: 由于兼具部署可移植性/跨平台一致性以及小巧轻便的特点,容器非常适用于现代开发和应用程序模式(例如 DevOps、无服务器和微服务),这些模式已构建为小增量的常规代码部署。
- 提高利用率: 与虚拟机一样,容器也可以让开发人员和运营商提高物理计算机的 CPU 和内存利用率。 容器比虚拟机更胜一筹的是,由于它们支持微服务架构,所以可以更精细地部署和扩展应用程序组件,这取代了以往因为单个组件难以处理负载而必须扩展整个应用程序的做法。
二、Docker概念介绍
1. 什么是Docker?
Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。并且它是一个用于开发,交付和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。
2. Docker优势
1.交付物标准化:
Docker以集装箱为中心的标准化设计大大,提高了物流体系的运行效率。传统的软件交付物包括,应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件。Docker的标准化交付物称为“镜像”,包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式。
2.一次构建,多次交付:
Docker镜像做到"一次构建,多次交付"。当涉及到应用程序多副本部署或者应用程序迁移时,更能体现Docker的价值。
3.应用隔离:
Docker可以隔离不同应用程序之间的相互影响,比虚拟机开销更小;容器技术部署速度快,开发、测试更敏捷;提高系统利用率,降低资源成本。
3. Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。其中服务端(容器引擎)是一个服务进程,管理着所有的容器。客户端是Docker服务端的远程控制器,可以用来控制Docker的服务端进程。
Docker 包括三个基本组件:
3.1 仓库(Repository)
用来保存镜像,可以看做代码控制中的代码仓库。分公有和私有。
- 公有库:Docker-hub(默认)、Daocloud、ali、网易蜂巢
- 私有库:公司内部使用,如harbor(第三方软件)
3.2 镜像(Image)
相当于一个 root 文件系统。运行镜像得到容器,没有运行镜像得到容器只读模板,每一个镜像由一系列的层(layers)组成。每一个镜像都可能依赖于由一个或多个下层组成的另一个镜像,下层镜像是上层镜像的父镜像。一个没有任何父镜像的镜像。以基础镜像为基础增加其他功能。
注:仓库(Registry)中的镜像是存储库(Repository)组成的,每个存储库(Repository)中包含了若干个镜像(image)。仓库(Registry)可以没有存储库(Repository),但如果有存储库(Repository),那么存储库(Repository)中至少要包含一个镜像(image)。
3.3 容器(Container)
类似文件夹,一个 Docker 容器包含了某个应用运行所需要的所有环境。每一个Docker容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分,Docker 容器可以运行、开始、停止、移动和删除。
3.4 三者关系
镜像(Image)存在仓库(Registeries)中,使用镜像需要从仓库拉取。镜像运行得到容器(Container),一个镜像可以运行n个容器,容器可以构建成镜像(即生成镜像的新版本)。