1.Docker是什么
2.容器技术与虚拟化技术的比较
3.Docker能做什么
4.Docker的基本组成和架构图解
5.Docker的安装步骤
6.Docker为什么要比VM虚拟机快
1.Docker是什么
在回答docker是什么之前,我们先来看看为什么docker会出现:
假设我们现在正在开发一个项目,我们使用自己的工作机进行开发,开发环境具有某些特定的配置。其它开发人员各自工作机上的开发环境也各有不同。我们正在开发的应用依赖于当前我们电脑上的配置。此外公司还有各种部署环境(dev,test,pre,prod),我们不希望因为这些开发环境而反复进行创建服务器环境的配置,请问?
如果确保应用能在这些服务器上顺利运行?而且在部署过程中不出现令人头疼的版本,配置问题。
对于这一系列部署环境,如何只进行一次配置而不是频繁地重复配置?
答案就是使用容器。Docker对于上述问题,给出了一个标准化的解决方案————系统平滑移植,容器虚拟化技术。
配置环境步骤繁琐,非常麻烦,每台机器都要配置一次。所以软件能不能自带环境安装?换句话说,安装的时候,把原始环境也复制过来,这样就能解决每台机器需要配置一遍的问题,也解决了“在我的电脑上能跑,在你的电脑上不行”的问题。
之前配置一个应用的运行环境,需要安装各种软件,JDK/RabbitMQ/MySQL/Redis等等,每一个配置都需要时间进行安装,而且还得注意版本,在本机windows/mac上安装完之后,在服务器linux还得安装,移植是非常麻烦的。
Docker的主要目标是"Build,Ship and Run Any App,Anywhere",也就是通过对用户App及环境的一次构建,让用户APP(也可以是一个数据库等应用)及其环境能够做到"一次镜像,处处运行"。它主要解决了运行环境和配置问题,有助于整体发布的容器虚拟化技术。
Docker将应用打成镜像,通过镜像成为容器运行在Docker上面的实例,而Docker容器在任务操作系统都是一致的,只需要一次配置好环境,换到别的机子上就可以一键部署,大大简化了操作。
2.容器技术与虚拟化技术的比较
传统虚拟机技术:
其实虚拟机技术就是一种带环境安装的技术。
虚拟机可以在一个操作系统上运行另一个操作系统,比如在win11里面运行Linux。而且被运行的系统毫无感知,看上去就和真实系统一样。对于win11来说,虚拟机就是一个普通文件,不需要了可以删掉,对其他部分毫无影响。
WIN 11 | VMWare | CentOs | 各种配置+软件 | 虚拟机实例 |
---|
缺点:
资源占用多
冗余步骤多
启动速度慢
容器虚拟机技术
由于虚拟机存在上述那些缺点,Linux发展出了另一种虚拟化技术。
容器只需要软件工作所需要的资源库,其它一概不需要,系统因此变得更轻量级并保证部署在任何环境中的软件都能始终如一地运行。
3.Docker能做什么
Docker的目标:一次构建、随处运行。
3.1)更快速的应用交付和部署
传统的开发完成之后,还需要提供一堆安装程序和配置说明文档,安装部署后还要根据配置文档进行繁杂的配置。Docker化之后只需要交付少量的镜像文件,在正式环境加载镜像并运行即可,应用安装配置在镜像里面已经内置好,大大节省了配置部署时间。
3.2)更便捷的升级和扩缩容
随着微服务的发展,大量的微服务会在Docker里运行,每个Docker容器将变成一块“积木”,应用的升级和扩容将会变得非常容易。
3.3)更简单的系统运维
应用容器化运行后,生产环境运行的应用与开发,测试环境的应用高度一致,容器会将应用程序相关的环境完全封装起来。不会因为操作系统的不一致性给应用带来影响,产生其它的bug。
3.4)更高效的计算资源利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。
4.Docker的基本组成和架构图解
Docker有以下几个重要的概念:
镜像(image):镜像是一个只读的模板,可以用来创建很多容器。镜像就像JAVA中的类一样,而docker容器实例就类似于java new出来的对象。
容器(container):Docker利用容器独立运行应用,应用程序运行在容器里面,容器里面有一个虚拟化的环境,容器就是用镜像创建运行的实例。
仓库(repository):类似于maven仓库,是集中存放镜像文件的场所。
5.Docker的安装步骤
目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上,要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Centos7.x。
我们可以根据官网的安装流程来执行:https://docs.docker.com/engin... ,只不过配置镜像仓库需要注意一下,要设置成国内镜像。
5.1)卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
5.2)yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
5.3)安装需要的软件包
yum install -y yum-utils
5.4)设置stable镜像仓库
官网:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
我们设置为国内镜像:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.5)更新yum软件包索引
yum makecache fast
5.6)安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
5.7)启动docker
systemctl start docker
5.8)测试
docker version
docker run hello-world
当我们运行run命令的时候,我们会先检查本机有没有这个镜像,有的话直接运行,没有的话去镜像仓库里拉取镜像,再进行运行。
6.Docker为什么要比VM虚拟机快
(1)docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。它只需要必要的操作系统文件,就可以直接启动。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
Docker | 虚拟机 | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上独立运行虚拟机OS |
存储大小 | 小,便于存储传输 | 大,需要操作系统全部文件 |
运行性能 | 几乎无额外性能损失 | 操作系统的额外CPU消耗 |
移植性 | 灵活,轻便,一致性高 | 笨重,与虚拟化技术耦合度高 |
部署速度 | 速度快 | 较慢 |