初识 Docker

2023年 9月 25日 44.2k 0

Docker 是什么?

Docker 是一个用于构建、发布和运行程序的开源项目。 它是一个命令行程序、一个后台进程和一组远程服务。和物流运输物品的过程很相似,可以将 Docker 视为一家软件物流提供商,主要用于解决软件常见的问题,简化安装、运行、发布和删除软件的过程。 它通过使用称为容器(Containers)的技术来实现这一点。

Containers

任何使用 Docker 运行的软件都在容器内运行。 Docker 使用现有的容器引擎来提供根据最佳实践构建的一致容器。和虚拟机很像,软件都是在互相隔离的环境内运行,但是容器不是虚拟机。

容器不是虚拟机

虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统,这需要很长时间才能创建,并且需要大量的资源开销,因为除了要使用的软件外还运行整个操作系统。比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的 Ubuntu 应用了。而 Docker 仅仅是封装软件需要的一些库,并没有模拟完整的操作系统。

虚拟机提供硬件抽象,以便可以运行操作系统。 而容器仅仅是操作系统的一项功能。 所以,如果虚拟机运行的是现代 Linux 内核的操作系统,那么就可以在虚拟机中运行 Docker。所以,Docker 就是一个系统进程,它们是互补的技术。

在容器中运行软件

Docker 是一个CS架构的程序,由两部分组成:

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):这是与用户交互的 Docker 程序,启动、停止或安装软件,就需要通过命令向Docker服务端发送指令。

如图:

image.png
图上显示了三个正在运行的容器。 每个进程都作为 Docker 引擎的子进程运行,用容器包装,并且各自对应的进程在用户空间的自己的内存子空间中运行。 在容器内运行的程序只能访问容器范围内自己的内存和资源。

集装箱

可以把 Docker 容器想象成一个物理运输集装箱。但是,它存储的不是货物,而是一个存储和运行应用程序及其所有依赖项(不包括正在运行的操作系统内核)的集装箱。正如起重机、卡车、火车和船舶可以轻松地运输这些箱子一样,Docker也可以轻松地运行、复制和分发容器。

Docker解决了什么问题?

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容性问题
  • 开发、测试、生产环境有差异,

必须考虑正在使用的操作系统、软件所需的资源、已经安装的其他软件以及它依赖的其他软件。需要决定安装在哪里,以及如何安装。如果想确保多台机器随着时间的推移使用一组一致的软件,那么这些问题只会变得更糟。当应用程序共享依赖项时,事情只会变得更加复杂,比如一个应用程序需要升级依赖项,但另一个应用程序不需要,等等,如图:
image.png

而 Docker 巧妙的解决了这些问题,Docker 将应用的函数库、依赖、配置与应用一起打包,将每个应用放到一个隔离容器去运行,避免互相干扰,这样打包好的应用包中,既包含应用本身,也保护应用所需要的函数库、依赖,无需再操作系统上安装这些,自然就不存在不同应用之间的兼容问题了,即便更换操作系统,也可由直接基于打包的函数库,借助于操作系统的Linux内核来运行。如图:

image.png
可以看到,Docker 通过使用容器和镜像隔离所有内容来保持事物井井有条。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论