当前位置: 代码网 > 服务器>服务器>Linux > Docker:基础概念、架构与网络模式详解

Docker:基础概念、架构与网络模式详解

2024年08月02日 Linux 我要评论
Docker是一个用于开发,交付和运行应用程序的开放平台.docker使您能够将应用程序域基础框架分开,以便你可以快速开发交付软件.使用docker,你可以管理你的基础架构以管理应用程序相同的方式.通过利用docker用于交付,测试和部署代码的方法,你可以显著减少编写代码和生产环境中运行代码之间的延迟.

1.docker的基本概念

1.1.什么是docker

        docker是一个用于开发,交付和运行应用程序的开放平台.docker使您能够将应用程序域基础框架分开,以便你可以快速开发交付软件.使用docker,你可以管理你的基础架构以管理应用程序相同的方式.通过利用docker用于交付,测试和部署代码的方法,你可以显著减少编写代码和生产环境中运行代码之间的延迟.

1.2.docker和虚拟机的区别

1.2.1.框架

        每个虚拟机运行一个完整的操作系统,并在其上运行应用程序。虚拟机赖于一个虚拟化管理程序(如 vmware、hyper-v、kvm),该程序在物理硬件和虚拟机操作系统之间充当中介。每个虚拟机需要分配单独的系统资源(cpu、内存、存储),并运行自己的内核和操作系统实例。

        docker 容器共享宿主机操作系统的内核,但独立运行应用程序及其所有依赖项。使用操作系统级虚拟化技术(如 cgroups 和 namespaces)来隔离和管理容器。容器之间共享操作系统内核,启动时间快,占用资源少。

1.2.2.性能

        虚拟机由于需要运行一个完整的操作系统实例,虚拟机通常启动较慢,且占用更多系统资源。性能开销主要来自于操作系统的管理和hypervisor的开销。

        而docker的容器化应用程序几乎可以立即启动,因为它们不需要启动一个完整的操作系统。资源开销低,性能更接近于裸机。

1.2.3.资源分配

        虚拟机的资源分配是静态的,即在启动时分配特定的cpu、内存等资源,即使这些资源在某些时候未被完全利用,也不会被其他虚拟机使用。而docker的资源利用是动态和弹性的,多个容器可以高效地共享和利用系统资源。资源分配可以根据需求进行调整。

2.docker架构

       docker 架构通过客户端、守护进程、镜像、容器、仓库等多个组件的协同工作,提供了一个高效、灵活的容器化平台。

2.1.docker client(客户端)

        docker客户端是用户与 docker 交互的接口。用户通过命令行或其他工具向 docker 客户端发送命令,客户端再将命令传递给 docker 守护进程(docker daemon)进行处理。常用的 docker 命令如 docker rundocker pulldocker build 等,都是通过客户端发起的。

2.2.docker daemon(守护进程)

        docker daemon 是 docker 的核心组件,它运行在主机上,负责处理来自 docker 客户端的请求,并管理容器、镜像、网络和存储等资源。docker daemon 通常作为后台进程运行,可以在本地主机上,也可以通过远程 api 接受来自其他主机的请求。

2.3.docker 的核心组件:image镜像、container容器、registry仓库

2.3.1.镜像

        docker 镜像是一个只读的模板,它包含了运行应用程序所需的所有内容,包括代码、库、环境变量、配置文件等。镜像是不可变的,每次创建新的镜像时,都会生成一个新的快照。其中镜像遵循2个重要的原则:

  1. image是不可变的。创建image后,无法修改。您只能创建新图像或在其上添加更改。

  2. 容器image由层组成。每个层表示一组文件系统更改,用于添加、删除或修改文件。

这两个原则允许您扩展或添加到现有映像。例如,如果要构建 python 应用,则可以从python 图像并添加其他层以安装应用的依赖项并添加代码。这样一来,你就可以专注于你的应用,而不是 python 本身。

2.3.2.容器?

        docker 容器是镜像的运行实例。它可以被启动、停止、移动和删除。每个容器都是一个独立的、隔离的环境,包含了运行应用程序所需的一切。

2.3.3.仓库?

        docker 仓库是存储和分发镜像的地方。它们可以是公共的,也可以是私有的。最常用的公共仓库是 docker hub,此外还有许多其他的第三方仓库和企业内部的私有仓库。

2.4.docker compose

        容器的最佳实践之一是每个容器应该只做一件事,并且做好这件事。尽管有些例外,但应尽量避免让一个容器做多件事。你可以使用多个命令启动多个容器,但你会很快发现需要管理网络、连接容器到这些网络的所有标志等等。而且,当你完成后,清理变得有点复杂。

        此时通过docker compose,你可以在一个 yaml 文件中定义所有容器及其配置。如果你把这个文件包含在代码库中,任何克隆你代码库的人都可以通过一个命令启动所有容器。

2.5.docker swarm

        docker swarm 是 docker 的原生集群管理工具,允许用户将多个 docker 主机组合成一个虚拟的 docker 主机。通过 docker swarm,用户可以在集群中调度和管理容器,提供高可用性和负载均衡。

2.6.docker networking(网络)

        docker 网络用于容器之间以及容器与外部世界之间的通信。docker 提供了多种网络驱动,如桥接网络、主机网络、覆盖网络等,用户可以根据需求选择合适的网络模式。下面会详细说明.

2.7.docker storage(存储)

        docker 存储解决方案用于持久化容器数据。docker 提供了多种存储驱动,如数据卷(volumes)、绑定挂载(bind mounts)和 tmpfs 挂载,用户可以根据应用需求选择合适的存储方式。

3.docker容器的网络模式

        docker 提供了多种网络模式来连接容器。每种模式都有其特定的用途和配置方式,了解这些模式有助于在不同场景下选择合适的网络解决方案。

3.1. bridge(桥接)网络模式

        bridge网络模式是docker 默认的网络模式。当你启动一个新的容器时,docker 会自动将其连接到一个默认的桥接网络。这种模式适用于在同一主机上运行的多个容器之间的通信。每个容器都会获得一个独一无二的 ip 地址。通过与主机的桥接连接,这些容器还可以相互交互,与本地网络(lan)和 internet 互联。然而,它们不会以物理设备的形式出现在 lan 上。特点是:每个容器都有一个独立的ip地址;容器之间通过桥接网络相互通信;适合单机上的容器通信。

3.2.host(主机)网络模式

        允许容器共享宿主机的网络栈。在这种模式下,容器不会获得独立的 ip 地址,而是使用宿主机的 ip 地址。这种模式适用于需要高性能网络通信的场景。特点是:容器共享宿主机的网络栈;提高网络性能;容器和宿主机上的服务共享同一个端口空间。

3.3.none网络模式

        none网络模式为容器提供完全隔离的网络环境。容器不会连接到任何网络,只有一个回环接口。这种模式适用于需要完全隔离网络的容器。特点是:容器没有网络连接;适合需要完全隔离的环境。

3.4. container网络模式

        container网络模式允许多个容器共享同一个网络栈。在这种模式下,一个容器可以与另一个容器共享网络接口。适用于需要紧密耦合的容器之间的通信。特点是:多个容器共享同一网络栈;容器之间通信效率高.

3.5.overlay网络模式

overlay网络模式用于跨多个 docker 主机的容器通信,常用于 docker swarm 或 kubernetes 环境。通过覆盖网络,可以实现分布式集群中容器之间的通信。特点是:支持跨多个主机的容器通信;适用于分布式集群环境.

3.6.macvlan 网络模式

        是一种高级网络配置,允许你将容器直接连接到宿主机的网络,并为每个容器分配一个独立的 mac 地址。这种模式使得容器在网络中看起来像是独立的物理设备。它非常适合需要与物理网络设备进行高度集成的场景。特点是:每个容器都有自己的 mac 地址和 ip 地址,类似于物理设备;容器可以直接与宿主机的物理网络通信,减少了网络开销;由于容器直接连接到物理网络,网络性能较好;需要手动配置物理网络接口和子网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com