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 地址,类似于物理设备;容器可以直接与宿主机的物理网络通信,减少了网络开销;由于容器直接连接到物理网络,网络性能较好;需要手动配置物理网络接口和子网。

相关推荐
曲幽4 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理