当前位置: 首页 > news >正文

开源的容器化平台:Docker

文章目录

  • Docker全阶段
    • 一、Docker发展与简介
      • 1. 云服务与虚拟化基础
        • 1.1 云服务模型介绍
          • 1.1.1 IaaS(基础设施即服务)
          • 1.1.2 PaaS(平台即服务)
          • 1.1.3 SaaS(软件即服务)
          • 1.1.4 DaaS(数据即服务)
        • 1.2 常见云服务提供商
      • 2. 虚拟化技术概述
        • 2.1 虚拟化基础
          • 2.1.1 虚拟化类型
          • 2.1.2 虚拟化产品
      • 3. Docker简介及其重要性
        • 3.1 为什么使用 Docker
        • 3.2 Docker 发展历史
        • 3.3 Docker 版本:CE vs EE
        • 3.4 Docker 与传统虚拟化的区别
        • 3.5 容器化技术的生态系统
        • 3.6 Docker 容器的优势
        • 3.7 容器技术的应用场景
      • 4. Docker 基础概念
        • 4.1 Docker 简介
          • 4.1.1 Docker 的 Logo 设计
          • 4.1.2 Docker 的设计宗旨
          • 4.1.3 容器化的优势
          • 4.1.4 Docker 容器与虚拟机的区别
          • 4.1.5 Linux 六大命名空间
          • 4.1.6 Docker 架构以及组件
          • 4.1.7 Docker 的核心技术
        • 4.2 Docker 核心概念
        • 4.3 Docker 安装与配置
    • 二、Docker 容器管理
      • 1. Docker 镜像操作
        • 1.1 搜索镜像
        • 1.2 获取镜像
        • 1.3 镜像加速下载
          • 1.3.1 阿里云加速器
          • 1.3.2 华为加速器
        • 1.4 查看镜像信息
          • 1.4.1 查看本地所有镜像
        • 1.5 获取镜像详细信息
        • 1.6 为本地镜像添加标签
        • 1.7 删除镜像
        • 1.8 存储镜像(导出)
        • 1.9 载入镜像(导入)
        • 1.10 上传镜像到 Docker Hub
          • 1.10.1 标签镜像
          • 1.10.2 登录 Docker Hub
          • 1.10.3 上传镜像
      • 2. Docker 容器操作
        • 2.1 创建容器
        • 2.2 启动容器
        • 2.3 停止容器
        • 2.4 查看容器状态
        • 2.5 创建并启动容器
        • 2.6 在后台持续运行 docker run 创建的容器
        • 2.7 容器交互
        • 2.8 复制到容器中
        • 2.9 容器的导出与导入
        • 2.10 删除容器
    • 三、Docker 网络管理
      • 1. Docker 网络实现原理
      • 2. Docker 的网络模式
        • 2.1 host模式
        • 2.2 Container模式
        • 2.3 无网络模式(none)
        • 2.4 桥接模式(bridge)
        • 2.5 自定义模式
      • 3. 总结


Docker全阶段

一、Docker发展与简介

1. 云服务与虚拟化基础

1.1 云服务模型介绍

云计算是通过网络为用户提供可伸缩的计算资源。云服务通常分为以下几种类型:

1.1.1 IaaS(基础设施即服务)
  • 提供虚拟化计算资源(如虚拟机、存储、网络等)。
  • 用户可以灵活配置自己的计算环境,负责安装操作系统、管理资源等。
  • 优点:灵活度高、可扩展性强。
  • 缺点:管理复杂,需要较多技术支持。
1.1.2 PaaS(平台即服务)
  • 提供一个开发平台,用户可以在上面开发应用程序,而无需关注底层硬件或操作系统。
  • 优点:简化开发过程,适合开发者。
  • 缺点:灵活度较低,可能受到平台限制。
1.1.3 SaaS(软件即服务)
  • 提供已经构建好的应用程序,用户可以直接使用,无需安装和维护。
  • 优点:快速部署,省时省力。
  • 缺点:定制化差,依赖于服务提供商。
1.1.4 DaaS(数据即服务)
  • 提供数据处理和分析服务,用户可以访问、分析云端存储的大数据。
  • 优点:降低用户管理数据的难度。
  • 缺点:可能涉及数据隐私问题。
1.2 常见云服务提供商
  • 阿里云腾讯云AWSGoogle Cloud华为云等是市场上主要的云服务提供商。
  • 云服务提供商通常提供各种服务,如存储、计算、网络、CDN 等。

2. 虚拟化技术概述

2.1 虚拟化基础
2.1.1 虚拟化类型
  • 全虚拟化:虚拟化软件完全模拟硬件环境,允许多个操作系统共享硬件资源,彼此之间相互独立。
    • 适用场景:需要兼容多个操作系统(如 Linux 与 Windows 同时运行)的环境。
  • 半虚拟化:虚拟机与宿主操作系统协作,通过修改操作系统内核来提高性能。
    • 适用场景:高性能需求的环境,尤其是优化了开源操作系统(如 Linux)的虚拟化。
2.1.2 虚拟化产品
  • VMware:广泛使用的企业级虚拟化平台,支持全虚拟化和半虚拟化。
  • KVM:Linux 内核中的虚拟化解决方案,支持硬件虚拟化。
  • Hyper-V:由微软推出的虚拟化平台,集成于 Windows Server 中。
  • VirtualBox:适用于个人和开发者的虚拟化产品,跨平台支持(Linux、macOS、Windows)。
  • EXSI 虚拟化
    • 学习链接:
      • ① 简单理解:https://baike.baidu.com/item/VMware%20vSphere/1716985?fromModule=lemma_inlin
      • ② ESXi教程安装:https://blog.csdn.net/G_D0120/article/details/138537920

3. Docker简介及其重要性

3.1 为什么使用 Docker

Docker 是一种容器化技术,它使得开发者可以将应用及其依赖打包到一个标准化的容器中,从而在任何环境下都能一致地运行。这个概念类似于将应用放入一个容器(集装箱),无论容器被移动到哪个环境,它都能保持原有的运行状态。

容器技术相比传统的虚拟化技术(如 VMware)具有显著优势。传统虚拟化需要在每个虚拟机中运行完整的操作系统,资源消耗大,而 Docker 仅在宿主操作系统上运行多个隔离的容器,不需要完整的操作系统,大大减少了系统开销和资源浪费。

通过 Docker,应用可以更轻松地实现跨平台部署和运行。举个例子,一辆兰博基尼应用程序被装进集装箱(容器),可以在不同的操作系统上(如 CentOS 到 Ubuntu)无缝迁移,确保应用始终以相同的方式运行。

3.2 Docker 发展历史

Docker 是由 Solomon Hykes 和他团队在 2013 年从 DotCloud 开始开发的。它的最初目标是利用容器技术提供一种新的应用部署方式。Docker 从一开始就有了强大的生态系统和社区支持,迅速发展并成为全球最流行的容器化平台。

主要的发展节点包括:

  • 2013年:Docker 项目发布;
  • 2014年:Docker 公司成立;
  • 2015年:Docker 发布了重要的版本 1.8,引入了新的网络架构和卷管理;
  • 2017年:发布了 Docker Enterprise Edition(企业版)和 Docker Community Edition(社区版),并开始了时间驱动的版本发布。
  • 2018年Docker 18.09 发布,加入了新的构建功能和改进的性能,重点是多阶段构建(Multi-stage Builds)和新的容器日志功能。Docker 的 Kubernetes 集成 开始,推出了 Docker Desktop 中的 Kubernetes 支持,使得开发者可以在本地轻松使用 Kubernetes 来部署和管理容器。
  • 2019年Docker 19.03 发布,新增了对 GPU 加速 的支持,以及 Docker CLI 的改进。此外,Docker 为 Kubernetes 提供了更好的支持。Docker Desktop 的更新增强了与 Kubernetes 的集成,支持在 Windows 和 macOS 上直接运行 Kubernetes 集群。Docker 提出了 Docker Desktop for Windows 和 macOS,为开发者提供了一个跨平台、统一的开发环境,结合了 Docker 引擎和 Kubernetes。
  • 2020年Docker 20.10 发布,新增了对 Docker Compose v2 的支持,并在性能、功能和稳定性方面进行了一系列增强。Docker 宣布将 Docker SwarmKubernetes 的集成进行区分,Kubernetes 成为 Docker 引擎推荐的容器编排工具。Docker 开始更加聚焦于开发者工具,而逐渐减少对企业级 Kubernetes 的直接支持,特别是在容器编排方面。
  • 2021年:Docker 进一步优化了其本地开发工具,使得开发者能够更容易在本地环境中使用容器和 Kubernetes 进行集成。Docker HubDocker Desktop 的改进,使得 Docker 的云端镜像存储和本地开发环境更加流畅。
  • 2022年:Docker 继续加大对 开发者体验 的关注,推出了对 GitHub 等工具的深度集成,帮助开发者快速构建和部署容器。在企业领域,Docker 企业版继续被 Kubernetes 和其他工具组合使用,尤其是对于 CI/CDDevOps 环境中的大规模部署。
  • 2023年Docker 23.x 发布,进一步增强了对 云原生应用 的支持,特别是对 Kubernetes 生态系统的集成增强。Docker 在容器优化、安全性和持续集成/持续交付(CI/CD)方面继续推出新功能,提升了企业级应用部署的效率和安全性。Docker 提供了更多对 开源 和社区驱动的工具的支持,力求保持其在容器生态中的主导地位。
3.3 Docker 版本:CE vs EE

Docker 提供了两个主要版本:

  • Docker Community Edition (CE):适用于个人开发者或小型团队,提供基本的容器功能,免费使用。
  • Docker Enterprise Edition (EE):适用于大规模生产环境,强调企业级的安全性和支持,通常是付费版本。

每个版本的发布周期不同,CE 通常每个月发布新版本,而 EE 版本则会有更长的维护周期。

3.4 Docker 与传统虚拟化的区别

Docker 通过操作系统级虚拟化(LXC)提供轻量级的虚拟化,容器之间共享宿主机的操作系统内核,因此相比传统虚拟机,Docker 容器更加轻便、高效。

  • 传统虚拟机:每个虚拟机都包含完整的操作系统,资源占用大。
  • Docker 容器:共享宿主操作系统的内核,启动快,占用少,易于管理。
3.5 容器化技术的生态系统

容器技术是一种轻量级、提供隔离的虚拟化技术。这里是一些知名的容器技术:

  1. Docker:市场上最为知名和流行的容器框架之一,拥有生态系统完善且社区活跃的优秀特点。它通过简单的工具和接口,使得应用程序的部署于测试过程更为简单。
  2. Kubernetes:Google 开发并开源的容器编排平台,可以管理、调度和扩展容器的应用。
  3. OpenShift:是 Red Hat 提供的开源的容器平台,基于 Kubernetes,但提供了更丰富的功能。
  4. LXC: Linux 容器技术,比 Docker 更接近传统的虚拟化技术,可以看作是轻量级的 VM(虚拟机)。
  5. Rkt:由 CoreOS 开发的一种容器技术,设计上有别于 Docker,它更注重于安全性和模块化。
  6. Apache Mesos:一种用于大规模数据中心的容器编排平台,特别地,它可以与其他调度系统如 Marathon、Chronos 或 Jenkins 集成。
  7. Containerd:是一个开源的容器运行时,是 Docker 的核心组件之一,可用于管理完整的容器生命周期。
  8. Crio:是一个轻量级的容器运行时,专门用于 Kubernetes。
  9. Singularity:一款专注于面向性能敏感和计算密集型应用程序的容器技术。
  10. Podman:与 Docker 相似,但无需守护进程,支持运行和管理 OCI 容器和镜像。
3.6 Docker 容器的优势
  • 移植性:应用和其依赖打包在容器中,跨平台和跨环境运行无缝。
  • 隔离性:容器内的应用互相隔离,不会影响宿主机或其他容器。
  • 效率高:由于不需要完整的操作系统,容器消耗的资源少,启动速度快。
  • 简化部署:通过 Docker,可以轻松创建、复制、修改和删除容器,简化了应用部署和管理的复杂度。
3.7 容器技术的应用场景
  • CI/CD(持续集成与持续交付):利用 Docker 快速构建和部署应用,保证开发、测试、生产环境的一致性。
  • 微服务架构:容器技术与微服务架构相得益彰,可以独立部署和扩展每个微服务。
  • 多云与混合云环境:容器跨平台能力使得应用能在不同云环境和本地环境间无缝迁移。

4. Docker 基础概念

4.1 Docker 简介
4.1.1 Docker 的 Logo 设计

Docker 的 Logo 设计为一条蓝色鲸鱼,拖着许多集装箱。鲸鱼代表宿主机,集装箱代表相互隔离的容器,每个集装箱中都包含自己的应用程序。

4.1.2 Docker 的设计宗旨

Docker 的设计宗旨是 Build, Ship and Run Any App, Anywhere。通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件可以是一个应用、一套服务,甚至是一个完整的操作系统。

4.1.3 容器化的优势
  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:可以即时部署更新和升级。
  • 便携式:可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。
4.1.4 Docker 容器与虚拟机的区别

容器共享宿主机的操作系统内核,而虚拟机则需要运行独立的操作系统。

特性Docker 容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗 50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源隔离/限制完全隔离
4.1.5 Linux 六大命名空间
命名空间缩写作用效果
MNT挂载文件系统隔离每个命名空间可以有自己的文件系统挂载点
NET网络网络资源隔离每个命名空间可以有自己的网络栈,包括网络接口、路由表等
PID进程进程号隔离每个命名空间有自己独立的 PID 编号空间
IPC间通进程间通信隔离每个命名空间有自己独立的 System V IPC 和 POSIX 消息队列
UTS主机主机名、域名隔离每个命名空间可以有自己的主机名和域名
USER用户用户名、组名隔离每个命名空间可以有自己的用户和组 ID 映射
4.1.6 Docker 架构以及组件
  • Docker daemon (Docker守护进程):Docker daemon 是一个运行在宿主机 (DOCKER_HOST) 的后台进程。可通过 Docker 客户端与之通信。
  • Client (Docker客户端):Docker 客户端是 Docker 的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon 通信。图中,docker build 等都是 Docker 的相关命令。
  • Images (Docker镜像):Docker 镜像是一个只读模版,它包含创建 Docker 容器的说明。它和系统安装光盘有点像—使用系统安装光盘可以安装系统,同理,使用 Docker 镜像可以运行 Docker 镜像中的程序。
  • Container (容器):容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API 或者 CLI 命令来启停,移动,删除容器。
  • Registry:Docker Registry 是一个集中存储与分发镜像的服务。构建完 Docker 镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助 Docker Registry 来避免镜像的手动复制。一个 Docker Registry 可包含多个 Docker 仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker 镜像。这跟 Maven 的仓库有点类似,如果把 Docker Registry 比作 Maven 仓库的话,那么 Docker 仓库就可理解为某 jar 包的路径,而镜像标签则可理解为 jar 包的版本号。
4.1.7 Docker 的核心技术

Docker 容器本质上是宿主机的一个进程,通过以下技术实现资源隔离和限制:

  • Namespace:实现资源隔离。
  • Cgroup:实现资源限制。
  • 写时复制技术(Copy-on-Write):实现高效的文件操作。
4.2 Docker 核心概念
  1. 镜像(Image)
    • 镜像是包含应用程序及其所有依赖环境的可执行包。它是一个只读模板,基于该模板可以创建容器实例。
  2. 容器(Container)
    • 容器是镜像的运行实例。容器提供了与外部环境隔离的运行时环境,可以在不同的系统上运行。
    • 容器通过 Docker 引擎启动,具有独立的文件系统、网络、进程空间。
  3. 仓库(Repository)
    • 仓库是存放 Docker 镜像的地方。Docker Hub 是最常用的公共仓库,用户也可以创建私有仓库。
4.3 Docker 安装与配置
  • Docker 目前仅支持 64 位系统。
  • 关闭防火墙和 SELinux
systemctl stop firewalld.service
setenforce 0
  • 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2- yum-utils:提供了 `yum-config-manager` 工具。
- device-mapper:Linux 内核中支持逻辑卷管理的通用设备映射机制。
- device-mapper-persistent-data** 和 **lvm2**:device-mapper 存储驱动程序所需的依赖包。

在这里插入图片描述
在这里插入图片描述

  • 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这里插入图片描述

  • 安装 Docker-CE 并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service- Docker 系统包含两个程序:Docker 服务端和 Docker 客户端。
- Docker 服务端是一个服务进程,负责管理所有容器。
- Docker 客户端是 Docker 服务端的远程控制器,用于控制 Docker 服务端进程

在这里插入图片描述

  • 基本命令
    • docker --version:查看 Docker 版本。
    • docker info:查看 Docker 系统信息。
      在这里插入图片描述

二、Docker 容器管理

1. Docker 镜像操作

1.1 搜索镜像
docker search nginx
  • 作用:通过关键字(例如 nginx)在 Docker Hub 上搜索相关的镜像。搜索结果会显示镜像的名称、描述、星级评价等。
1.2 获取镜像
docker pull nginx
  • 作用:从 Docker Hub 拉取 nginx 镜像,默认下载最新(latest)版本。如果你不指定标签(tag),则会下载默认的 latest 标签的镜像。
1.3 镜像加速下载

镜像下载可能会因为网络原因而比较慢,尤其是国内用户。这里给出了几种加速镜像下载的方法。

1.3.1 阿里云加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
  • 作用:配置 Docker 使用阿里云镜像加速器来提高镜像下载速度。
1.3.2 华为加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
  • 作用:配置 Docker 使用华为云镜像加速器。
1.4 查看镜像信息
cat /var/lib/docker/image/overlay2/repositories.json
  • 作用:查看 Docker 本地镜像的详细信息。/var/lib/docker 是 Docker 存储所有数据的目录,镜像存储在 image 目录下的 overlay2 子目录中。
1.4.1 查看本地所有镜像
docker images
  • 作用:列出所有已经下载到本地的镜像,包括仓库名称、标签、镜像 ID、创建时间和大小等信息。
1.5 获取镜像详细信息
docker inspect 41f689c20910REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

在这里插入图片描述
在这里插入图片描述

  • 作用:获取指定镜像(通过镜像 ID)详细信息。此命令返回一个 JSON 格式的详细信息,包括镜像的层次、历史记录、配置、大小等。
1.6 为本地镜像添加标签
docker tag nginx:latest nginx:web
docker images | grep nginx

在这里插入图片描述

  • 作用:为本地的 nginx:latest 镜像添加新的标签 nginx:web,这并不会创建新的镜像,而是为同一个镜像附加了新的标签。
1.7 删除镜像
docker rmi nginx:web

在这里插入图片描述

  • 作用:删除指定标签的镜像。注意:如果镜像有多个标签,删除指定标签不会删除镜像本身,只有在没有其他标签和容器依赖的情况下才会彻底删除镜像。如果镜像正在被容器使用,需要先删除容器。
1.8 存储镜像(导出)
docker save -o nginx.tar nginx:latest
  • 作用:将本地镜像 nginx:latest 保存为 tar 包(nginx.tar)。这可以用于镜像备份或迁移。
    在这里插入图片描述
    在这里插入图片描述
1.9 载入镜像(导入)
docker load < nginx.tar

在这里插入图片描述

docker load -i nginx.tar
  • 作用:从本地 tar 文件中加载镜像。你可以将导出的镜像文件通过此命令重新加载到 Docker 中。
1.10 上传镜像到 Docker Hub
1.10.1 标签镜像
docker tag nginx:latest soscscs/nginx:web
  • 作用:为镜像添加一个新的标签,并指定上传到 Docker Hub 的目标仓库。soscscs/nginx:web 表示在 Docker Hub 上的 soscscs 账户下的 nginx 仓库,并使用 web 标签。
1.10.2 登录 Docker Hub
docker login
  • 作用:登录 Docker Hub,输入用户名、密码进行身份验证。登录后才可以上传镜像。
1.10.3 上传镜像
docker push soscscs/nginx:web
  • 作用:将本地的 nginx:web 镜像上传到 Docker Hub。上传后,你可以在 Docker Hub 上看到该镜像,并分享或部署它。

2. Docker 容器操作

容器创建:就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

2.1 创建容器
docker create -it nginx:latest /bin/bash

在这里插入图片描述

  • 作用:创建一个新容器,但不启动它。
2.2 启动容器
docker start 8b0a7be0ff58
docker ps -a

在这里插入图片描述

  • 作用:启动已创建的容器。
2.3 停止容器
docker stop <container_id>
  • 作用:停止正在运行的容器。
2.4 查看容器状态
docker ps -a

在这里插入图片描述

  • 作用:查看所有容器,包括已停止的容器。
2.5 创建并启动容器
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a

在这里插入图片描述

  • 作用:可以直接执行 docker run 命令,等同于先执行 docker create 命令,再执行 docker start 命令。
2.6 在后台持续运行 docker run 创建的容器
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"docker run -itd --name test1 centos:7 /bin/bash   #创建容器并持续运行容器docker ps -a

在这里插入图片描述
在这里插入图片描述

  • 作用:需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
2.7 容器交互
docker exec -it 2592d3fad0fb /bin/bash

在这里插入图片描述

  • 作用:需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
2.8 复制到容器中
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/

在这里插入图片描述

  • 作用:把宿主机的文件传入到容器内部。
2.9 容器的导出与导入
docker export 2592d3fad0fb > centos7.tar
cat centos7.tar | docker import - centos7:test

在这里插入图片描述
在这里插入图片描述

  • 作用:用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用 docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
2.10 删除容器
docker rm 2592d3fad0fb

在这里插入图片描述

  • 作用:删除已经终止状态的容器。

三、Docker 网络管理

1. Docker 网络实现原理

Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥 (docker0),Docker 启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

Docker 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p-P 参数来启用,访问容器的时候就通过 [宿主机IP]:[容器端口] 访问容器。

2. Docker 的网络模式

2.1 host模式

相当于 Vmware 中的桥接模式,与宿主机在同一个网络中,但没有独立 IP 地址。Docker 使用了 Linux 的 Namespaces 技术来进行资源隔离,如 PID Namespace 隔离进程,Mount Namespace 隔离文件系统,Network Namespace 隔离网络等。一个 Network Namespace 提供了一份独立的网络环境,包括网卡、路由、iptable 规则等都与其他的 Network Namespace 隔离。一个 Docker 容器一般会分配一个独立的 Network Namespace。但如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡、配置自己的 IP 等,而是使用宿主机的 IP 和端口。

2.2 Container模式

在理解了 host 模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

2.3 无网络模式(none)

使用 none 模式,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。这种网络模式下容器只有 lo 回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

2.4 桥接模式(bridge)

bridge 模式是 docker 的默认网络模式,不用 --net 参数,就是 bridge 模式。相当于 Vmware 中的 nat 模式,容器使用独立 network Namespace,并连接到 docker0 虚拟网卡。通过 docker0 网桥以及 iptables nat 表配置与宿主机通信,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。

2.5 自定义模式

自定义网络模式,docker 提供了三种自定义网络驱动:bridge、overlay、macvlan。bridge 驱动类似默认的 bridge 网络模式,但增加了一些新的功能,overlay 和 macvlan 是用于创建跨主机网络。建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动 DNS 解析容器名称到 IP 地址。Docker 提供了创建这些网络的默认网络驱动程序,你可以创建一个新的 Bridge 网络,Overlay 或 Macvlan 网络。

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

3. 总结

  1. 桥接模式(bridge)
    • 默认的网络模式,容器通过虚拟网桥与宿主机和其他容器通信。
  2. 主机模式(host)
    • 容器共享宿主机的网络栈,直接使用宿主机的 IP 地址。
  3. 容器模式(container)
    • 容器共享另一个容器的网络栈,两个容器可以使用相同的 IP 地址进行通信。
  4. 无网络模式(none)
    • 容器没有网络配置,只有回环接口(lo)。
  5. 自定义网络:定义网络允许用户自定义容器的网络范围、子网和路由,从而提供更高的网络控制和隔离性。

额外附加:

  1. Overlay:这是 Docker Swarm 模式的网络,主要用于在多个主机上创建一个分布式网络。容器间即便在不同的主机也能完成通信,相当于在跨主机的容器之间创建了一个覆盖网络。
  2. Macvlan:Macvlan 模式可以让容器直接连接到主机的物理网络,每个 Macvlan 接口都有一个唯一的 MAC 地址,此模式使得容器看起来就像是网络上的物理设备。
http://www.dtcms.com/a/410093.html

相关文章:

  • 【Prompt学习技能树地图】思维链(CoT)提示技术工作原理、主要技术方法及实践应用
  • 谁有手机可以上的网站网站建设 部署与发布视频
  • 【足式机器人算法】#1 强化学习基础
  • Maven的概述/简介/安装/基本使用/IDE配置/依赖管理
  • 构建 maven:3.8.7-jdk17 镜像
  • maven install依赖后 另一个项目 maven reload找不到包
  • 北京做网站的网络公司新网站改关键词
  • SpringCloud 项目阶段十:kafka实现双端信息同步以及ElasticSearch容器搭建示例
  • 解析前端框架 Axios 的设计理念与源码:从零手写一个支持 HTTP/3 的“类 Axios”最小核
  • 共享ip服务器做网站小型创意电子产品设计
  • [Dify] 知识库架构介绍与使用场景概述
  • NFS 服务器iSCSI 服务器
  • 如何确保CMS系统能够快速响应用户请求?全面性能优化指南
  • 【202509新版】Hexo + GitHub Pages 免费部署个人博客|保姆级教程 第三部
  • 同时使用ReactUse 、 ahooks与性能优化
  • 跨境电商怎么做一件代发宁波关键词排名优化平台
  • FreeFusion:基于交叉重构学习的红外与可见光图像融合
  • GraphRAG对自然语言处理中深层语义分析的革命性影响与未来启示
  • 数据分析-60-工业时序数据分析之开关频次
  • C++入门基础知识157—【用一篇博文简单了解数据结构之红黑树】
  • 做网站课程报告阜阳网站建设哪家好
  • 吃透 Java 中的 break 与 continue
  • 【Android之路】kotlin和Jatpack compose
  • 渗透测试入门:从网络抓包到Web安全基础
  • 阿里云CDN加速流量消耗大原因:动态加速
  • 云栖2025 | 阿里云自研大数据平台 ODPS 重磅升级:全面支持AI计算和服务
  • FreeRTOS内存分配与STM32内存布局详解
  • 外贸建站的公司wordpress如何汉化主题
  • phpcms网站系统 技术方案 系统框架图网站系统开发团队简介
  • vue3+ts项目实现陕西省3d地图