【docker】了解什么是Docker
一、前言
最近,在学习如何部署项目的时候,老是出错误,然后朋友推荐了去学一下docker,然后自己就去学了【尚硅谷】的关于docker的教程视频,学完之后,感觉docker真的强,可以把我们做好的app的进行跨平台、快速的运行、构建以及分享出去。学会了docker在掌握一项新的容器虚拟化技术的同时又方便了我们项目的一次分装,跨平台运行。所以我准备将自己学习的内容以博客的形式记录,方便后期的学习与回顾,当然大家也在小破站可以去看【尚硅谷】相应的视频讲解!
二、什么是Docker
这里借用docker官网(Docker: Accelerated Container Application Development)的一句话来解释:Docker就是用来加速我们应用的构建、分享以及运行的容器虚拟化技术!
PS:现在的docker官网已经不能直接访问了,作为一个IT人员,要懂得自己施加一些“魔法”哦!
三、Docker的工作原理
这里就借用【尚硅谷】视频里的一个插图来记录一下Docker的工作原理。
在这幅图中,有Client、Docker Host、Registry(应用市场)这三个部分,其中Docker Host(Docker 主机)表示我们的一台机器下载了我们的Docker那么这台机器就是我们的Docker主机,Docker的后台进程Daemon就会一直运行为我们服务;而Client表示一个命令行程序,可以通过命令(docker pull 、docker run等)来操作我们的Daemon;而Registry(应用市场)是Docker自己的应用市场,里面有很多的应用软件,这些应用软件被称为镜像。
Docker_hub应用市场:
1、如何Run
如上图所示,以运行redis为例,我们现在Client端执行docker pull redis命令(步骤①),此时我们的Daemon就回去应用市场找到我们的redis镜像(步骤②),将redis镜像下载到本机(步骤③),Client再执行docker run redis命令(步骤④),此时我们的Daemon就会找本地的redis镜像,如果找不到它也会自动下载(步骤⑤),找到这个镜像后就会启动它(步骤⑥),此时这个redis镜像就被启动了,我们把它叫做容器,当然我们可以启动多个容器!这就是我们如何Run的一个过程!
2、如何Build
如上图所示,我们有个构建好的软件OpenJDK,我们首先在Client端执行docker build xxx(软件名称)(步骤①),Daemon就会帮我们制造一个镜像(步骤②),然后就会生成一个OpenJDK镜像(步骤③),再在Client端执行docker push xxx(软件名称)(步骤④),此时Daemon就会将我们的OpenJDK镜像推送到我们的应用市场(步骤⑤),当OpenJDK镜像在应用市场时,其他人也就可以下载和访问我们的镜像了。
3、如何Share
其实,当我们讲解了Run、Build后,Share我们的软件,只需要熟悉docker pull xxx、docker push xxx,懂得如何在应用市场推送和下拉我们的镜像即可!
四、Docker容器化的特点
在上面的Docker的原理图中,我们会有两个比较新的词,分别是镜像和容器,至于镜像其实就是软件包,将我们的软件打成了包,至于容器的话,大家可能比较陌生,为什么会有容器化这种思想呢?
1、背景
要回答这个问题,首先我们要从虚拟机(Virtual Machine,简称VM)的发展说起,VM将一台物理设备虚拟为多个逻辑设备,每个逻辑设备可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高设备的工作效率。这表明我们在虚拟化部署的时候,每部署一个虚拟机就需要配一个操作系统,才能运行应用,如果此时我们用户只是做一些简单的操作话,采用VM技术本身比较负载而且会造成资源的浪费,迁移应用程序的话,也需要迁移整个VM。所以此时急需一种轻量级的能实现应用程序之间相互独立运行的虚拟化技术!
2、Docker容器
基于以上的背景,我们的容器虚拟化技术就孕育而生,它同时兼顾了我们的轻量级和隔离环境的存在,它之所以能这样是因为,它不像VM采用操作系统级的资源隔离,容器采用的是进程级的系统隔离。
它具体有以下特点:
①容器属于轻量级的VM、
②容器共享操作系统内核、
③容器拥有自己的文件系统、CPU、内存、进程空间等
④容器互相隔离
⑤容器安全可靠、高密度、跨平台等
五、总结
总的来说,这篇博客的内容只是让大家对Docker概念和原理有个基本的认识,关于Docker指令的实际操作会在后面的博客中继续记录的,大家感兴趣的可以持续关注哦~