帮助中心 >  行业资讯 >  运维 >  什么是docker?这篇文章用通俗的语言告诉你

什么是docker?这篇文章用通俗的语言告诉你

2025-04-24 17:27:09 99

随着家庭 NAS 的慢慢普及,越来越多的人拥有了自己的 NAS,就拿老宋来说,因为我工作中就接触一些服务器、数据库、docker 等等的东西,虽然不是说掌握,但是起码了解这些个东西,但是要知道不是所有的人都知道这些名词后面的含义,服务器这个相对好说,就是性能和稳定性更高的电脑主机,数据库就想象成功能更加强大的 excel 表格,那么什么是 docker 呢,今天老宋就来和小伙伴们一起学习下docker,想通俗理解请直接移步第四、五部分。

 

一、docker 基本架构示意

 1.png

 

二、名词解释

Docker 是一个用于开发、部署和运行应用程序的开源平台,下面是 Docker 中一些常见名词的解释:

 

1. Docker 引擎(Docker Engine)

Docker 引擎是 Docker 平台的核心组件,它是一个客户端 - 服务器应用程序,由守护进程(dockerd)、REST API 服务器和命令行界面(CLI)组成。守护进程负责管理容器、镜像等资源,REST API 服务器允许其他程序与守护进程进行交互,而 CLI 则提供了用户与 Docker 引擎交互的命令行工具。

 

2. 镜像(Image)

Docker 镜像是一个只读的模板,它包含了运行应用程序所需的所有文件系统、代码、运行时环境、库和配置等。可以将镜像看作是应用程序的快照,它可以用来创建 Docker 容器。镜像可以从 Docker Hub 等镜像仓库中下载,也可以使用 Dockerfile 自行构建。

 

3. 容器(Container)

容器是镜像的一个运行实例。当你启动一个镜像时,就会创建一个容器。容器是一个独立的、隔离的环境,它可以在任何支持 Docker 的系统上运行,并且具有自己的文件系统、进程空间和网络配置等。容器之间相互隔离,不会相互影响,这使得应用程序的部署和管理更加方便和安全。

 

4. Dockerfile

Dockerfile 是一个文本文件,它包含了一系列的指令和参数,用于描述如何构建 Docker 镜像。通过编写 Dockerfile,你可以定义镜像的基础操作系统、安装软件包、复制文件、设置环境变量等操作。使用 docker build 命令可以根据 Dockerfile 构建出一个新的镜像。

 

5. 仓库(Repository)

Docker 仓库是用于存储和分发 Docker 镜像的地方。类似于代码仓库,镜像仓库可以包含多个镜像,并且可以对镜像进行版本管理。Docker Hub 是 Docker 官方提供的公共镜像仓库,你可以在上面找到各种类型的镜像。此外,你也可以搭建自己的私有镜像仓库,用于存储和管理公司或团队内部的镜像。

 

6. 标签(Tag)

标签是用于标识镜像版本的一种方式。在 Docker 中,一个镜像可以有多个标签,通过标签可以方便地区分不同版本的镜像。例如,nginx:1.23.4 中的 1.23.4 就是一个标签,它表示这是 Nginx 镜像的 1.23.4 版本。

 

7. 卷(Volume)

卷是 Docker 中用于持久化数据的一种机制。由于容器是临时的,当容器被删除时,容器内的数据也会被删除。而卷可以将容器内的数据存储在宿主机上,这样即使容器被删除,数据也不会丢失。卷还可以在多个容器之间共享,方便数据的共享和管理。

 

8. 网络(Network)

Docker 网络用于实现容器之间以及容器与外部世界之间的通信。Docker 提供了多种网络驱动,如桥接网络、主机网络、覆盖网络等。通过网络,容器可以相互访问,也可以访问外部网络资源。例如,你可以将一个 Web 应用容器和一个数据库容器连接到同一个网络中,使它们可以相互通信。

 

三、基本原理 

 

Docker 核心解决的问题是利用其自研的 libcontainer 来实现类似虚拟机(VM)的功能,从而利用尽可能少的硬件资源给用户提供尽可能好的服务。与 VM 不同, libcontainer 并不是一套硬件虚拟化方法,而是操作系统级的虚拟化。这理解起来可能并不像 VM 那样直观,所以可以从 Docker 要解决的问题出发,看看它是怎么满足用户虚拟化需求的。

 

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的问题主要是以下 4 个:

 

隔离性

每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法的方案是 VM;libcontainer 的方案是容器,具体而言是 namespace。其中的 pid, net, ipc, mnt, uts 等将容器的进程, 网络, 消息, 文件系统和主机隔离开。

 

可配额/可度量

每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了 CPU 和内存,可以方便实现;libcontainer 则主要是利用 cgroups 来控制资源。cgroups 实现了对资源的配额和度量,提供了类似文件的接口。在 /cgroup 目录下新建一个文件夹即可新建一个 group,在此文件夹中新建 task 文件,并将 pid 写入该文件,即可实现对该进程的资源控制。

 

移动性

用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法通过 snapshot 和 image 来实现;Docker 主要通过 AUFS 实现。AUFS (AnotherUnionFS) 是一种联合文件系统, 就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。它具有节省存储空间、快速部署、节省内存、升级方便、允许在不更改 base-image 的同时修改其目录中的文件的特点。

 

安全性

这个讨论范围较大,这里强调是 host 主机的角度尽量保护容器。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在 KVM 等虚拟机中运行的;然而对于 libcontainer, 其中运行的进程应当是事先静态编译完成的。用户提供的参数也是通过 exec 系统调用提供给用户进程。通常情况下容器中也没有长进程存在。

 

四、通俗解释 

上面说的那些是不是有点头皮发麻了,别担心,下面老宋用通俗的话解释下 Docker 里的常见名词:

 

1. Docker 引擎

可以把 Docker 引擎想象成一个大工厂的总调度室。这里有一群工作人员(守护进程)负责安排各种生产任务,比如组装产品(创建容器)、存储原料(管理镜像)。同时,有一套通信系统(REST API 服务器)让其他部门能和调度室沟通,下达生产指令。而工人们手里的操作手册(命令行界面),能让他们方便地按照要求完成工作。

 

2. 镜像

镜像就像是制作电脑主机的配件。这些个配件包含了制作电脑主机所需的所有信息,像主板、CPU、内存等配件(文件系统、代码、运行环境等)的型号和数量,以及组装步骤(配置)。有了这些配件,就能做出很多一样的主机(容器)。

 

3. 容器

容器是用配件(镜像)组装出来的主机。每个主机都是独立的个体,有自己的序列号、配置(独立的文件系统、进程空间和网络配置)。即使有一个主机坏了,也不会影响其他主机。

 

4. Dockerfile

Dockerfile 好比是一份组装主机的操作说明书。它清楚地写着要准备哪些配件、用什么工具、按照什么顺序来组装。只要照着这份说明书(使用 docker build 命令),就能准备好所有的配件(镜像)。

 

5. 仓库

仓库就像一个大仓库,专门用来存放各种配件(镜像)。Docker Hub 是一个公共的大仓库,大家都能去里面挑选自己需要的配件。而公司或团队也可以建一个自己的小仓库(私有镜像仓库),把自己独立开发的配置存起来。

 

6. 标签

标签就像是贴在配件上的纸条,上面写着这个配件是用来组装哪种主机的,以及可以组装成那个版本的主机。比如一个内存条上写着“3200 DDR4 16GB 序列号***”,这就说明这个内存条只能用于支持 DDR4 的主板。

 

7. 卷

卷可以看作是主机的配件收纳箱。因为主机(容器)可能会坏掉,但里面的 CPU、内存、主板等重要配件(数据)可以放在收纳箱里保存起来。这样即使主机没了,配件还在,下次还能接着用。而且这个收纳箱里的配件还能在不同的主机(容器)之间共享。

 

8. 网络

网络就像是主机之间的网线。通过网线,主机(容器)之间可以互相送蛋糕(传输数据),也能和外面的世界(外部网络)做生意。不同的道路和通信方式(网络驱动)适用于不同的情况。

 

五、总结 

如果你读到这里,那么恭喜小伙伴,你应该对docker是什么有个概念了,其实和windows操作系统相比,docker可以理解成把某个应用程序封装成一个镜像,但是这个应用程序独立于这个操作系统(独立于操作系统运行、独立于操作系统使用的网络)所以说虚拟机是硬件级别的虚拟化(把1台服务器虚拟成N台服务器),而docker是软件操作系统级别的(把1台物理服务器的CPU独立虚拟成N个CPU,N个内存、N个主板,这些个CPU、内存和主板可以独立自主的任意拼装),说到这里,不知道小伙伴对docker理解了没有,如果你有更多关于docker的技术问题,欢迎登录蓝队云官网搜索查看。

 

蓝队云是成立十五年的云计算及网络安全服务商,提供域名注册、云服务器、虚拟主机、对象存储、SSL证书、漏洞扫描、安全运维、渗透测试、攻防演练、等保合规等专业的产品和服务,平台注册用户已超过100000+,服务政企客户60000+,云数据库支持免费试用3个月,欢迎了解体验。

 

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: