什么是容器?
容器是一个逻辑盒子中的软件包,其中包含应用程序运行所需的一切。其中包括操作系统、应用程序代码、运行时、系统工具、系统库等。Docker容器是基于Docker镜像构建的。由于镜像是只读的,Docker在镜像的只读文件系统上添加了一个读写文件系统来创建容器。
容器与虚拟机 (VM) 进行比较。VM 是运行在主机操作系统之上的来宾操作系统,例如Linux或Windows,可对底层硬件进行虚拟化访问。容器允许您将应用程序与库和其他依赖项打包在一起,为运行软件服务提供隔离的环境。
什么是Docker?
Docker 是一个基于Linux容器的开源平台,用于在容器内开发和运行应用程序。Docker用于在给定主机上同时部署许多容器。容器非常快速且轻量级,因为它们直接在主机内核中运行,因此不需要虚拟机管理程序的额外负载。
Docker架构和组件
Docker 使用客户端-服务器架构。Docker客户端与Docker守护进程通信,该守护进程用于构建、运行和分发Docker容器。Docker客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。
Docker架构中有五个主要组件:
- a) Docker Daemon监听 Docker API 请求并管理 Docker 对象,例如镜像、容器、网络和卷。
- b) Docker Clients: 借助Docker Clients , 用户可以与Docker进行交互。Docker 客户端提供命令行界面 (CLI),允许用户运行和停止 Docker 守护进程的应用程序命令。
- c) Docker Host 提供了完整的环境来执行和运行应用程序。它由 Docker 守护进程、镜像、容器、网络和存储组成。
- d) Docker Registry 存储 Docker 镜像。Docker Hub 是任何人都可以使用的公共注册表,并且 Docker 默认配置为使用 Docker Hub 上的映像。您可以在其上运行您自己的注册表。
- e) Docker 镜像是您根据 Dockerfile 中编写的一组指令构建的只读模板。映像定义了您希望打包的应用程序及其依赖项看起来像启动时要运行的进程。
容器内的资源隔离(Docker)
- a) 命名空间提供一层隔离。命名空间限制了您可以看到的内容。当我们运行容器时,Docker 会为该容器创建一组命名空间。有不同类型的命名空间pid、net、mnt、uts、ipc。
- b) 控制组将应用程序限制为一组特定的资源。它限制了您可以使用的资源量。这允许 Docker 引擎向容器共享可用的硬件资源,并可选择强制执行限制和约束。
- c)通过创建层来操作的 联合文件系统,Docker 镜像由相互分层的文件系统组成,使其非常轻量且快速。
如果您没有 UnionFS,则 200MB 的映像会运行 5 次,因为 5 个单独的容器意味着 1GB 的磁盘空间。
Docker引擎组件
Docker引擎是Docker的一部分,它创建并运行Docker容器。Docker Engine是Docker运行的层。它安装在主机上。它是一个轻量级的运行时和工具,用于管理容器、图像、构建等。
Docker Engine中包含三个组件:
- a) 服务器:它是名为dockerd的 docker 守护进程 。它可以创建和管理docker镜像,即容器、网络。
- b) Rest API:用于指示 docker 守护进程做什么。
- c) 命令行界面(CLI):它是用于输入docker命令的客户端。
Docker网络和Docker存储
Docker中的网络是 docker 的一部分,用于将docker容器相互连接以及与外部世界连接,以便它们可以相互通信,也可以与Docker 主机通信。您可以将 docker 容器连接到非 Docker工作负载。Docker 使用 容器网络模型(CNM)进行网络连接。
Docker 存储:默认情况下,容器内创建的所有文件都存储在可写容器层上,因此当该容器不再存在时,数据不会保留。Docker 有两个选项让容器在主机中存储文件,以便即使在容器停止后文件也能保留:volumes和 bind mounts。
Docker容器生命周期管理
创建容器时有不同的阶段,称为容器的生命周期,即创建、运行、暂停、删除和停止。
- 第一阶段是创建状态。此外,当我们使用Docker run命令时,容器会进入运行状态。
- 我们可以使用Docker stop/pause命令来停止或暂停容器。而且,要将容器从停止状态恢复到运行状态,我们使用Docker run命令。
- 我们可以使用Docker rm命令删除正在运行或已停止的容器。
转载请注明出处:https://www.cloudnative-tech.com/uncategorized/5886.html