墨风如雪博客

  • 源码小店
  • 传家宝VPS
让AI使用变得如此简单
  1. 首页
  2. docker
  3. 正文

docker 网络模式的使用详解

2023年 5月 16日 299点热度 0人点赞 0条评论

docker当中的四种网络模型

Docker 中有四种网络模式:

  1. Bridge 模式:默认模式,Docker 容器与主机在同一个网段,并且可以通过主机的 IP 地址进行访问。
  2. Host 模式:容器与主机共享同一个网络命名空间,容器可以直接使用主机的网络资源,如 IP 地址、端口等。
  3. None 模式:容器没有网络接口,与外界网络隔离,仅与主机进行通信。
  4. Overlay 模式:用于在多个 Docker 主机之间创建跨主机的网络,容器可以在不同的主机上运行,并且可以直接通信。 Docker 提供了多种网络模型以满足不同的应用场景和需求。以下是 Docker 的四种主要网络模型:

查看网络模型的命令

可以使用 docker network 命令来查看和管理 Docker 网络模式。以下是一些常见的 Docker 网络命令:

  1. docker network ls:列出当前 Docker 安装中的所有网络。
  2. docker network create [OPTIONS] NETWORK_NAME:创建一个新网络。
  3. docker network inspect NETWORK_NAME:查看指定网络的详细信息。
  4. docker network connect NETWORK_NAME CONTAINER_NAME:将容器连接到指定的网络。
  5. docker network disconnect NETWORK_NAME CONTAINER_NAME:断开容器与指定网络的连接。

以下是一些常见的选项:

  • --driver:指定网络驱动程序(默认为 bridge)。
  • --subnet:指定网络的子网。
  • --gateway:指定网络的网关。
  • --ip-range:指定分配给容器的 IP 地址范围。

例如,要创建一个名为 my-network 的自定义网络,可以使用以下命令:

docker network create --driver bridge --subnet 172.25.0.0/16 --gateway 172.25.0.1 my-network

这将创建一个名为 my-network 的新网络,子网为 172.25.0.0/16,网关为 172.25.0.1。

要查看网络的详细信息,可以使用以下命令:

docker network inspect my-network

这将显示名为 my-network 的网络的详细信息,包括其驱动程序、子网、网关和连接到该网络的容器列表。

要将容器 my-container 连接到 my-network 网络,可以使用以下命令:

docker network connect my-network my-container

这将将容器 my-container 连接到名为 my-network 的网络。

要断开容器 my-container 与 my-network 网络的连接,可以使用以下命令:

docker network disconnect my-network my-container

这将断开容器 my-container 与名为 my-network 的网络的连接。

配置和命令

  1. 桥接网络(bridge)

    桥接网络是 Docker 默认的网络模型。在这个模型中,所有的 Docker 容器会连接到一个虚拟的网桥,而该网桥会连接到宿主机的网络接口。每个容器都会获得一个内部 IP 地址,通过这个地址,容器可以与其他容器以及宿主机进行通信。如果需要从外部访问容器,需要设置端口映射,将容器的端口映射到宿主机的端口。

    docker run -d --name container_name -p host_port:container_port image_name
  2. 主机网络(host)

    主机网络模型允许容器直接使用宿主机的网络命名空间,这意味着容器可以直接访问宿主机的网络接口和 IP 地址。这种模式下,容器的网络性能通常更好,因为没有虚拟网络层的开销。但是,这种模式可能会导致端口冲突,并且容器之间的网络隔离较差。

    docker run -d --name container_name --network host image_name
  3. 容器网络(container)

    容器网络模型允许一个容器直接连接到另一个容器的网络命名空间。这种模式可以用于共享网络栈,例如在多容器应用中共享一个代理服务器。这种模式下,容器可以使用其他容器的网络接口和 IP 地址。

    docker run -d --name container_name --network container:other_container_name image_name
  4. 自定义网络(none/user-defined)

    • None:这种模型为容器提供了一个独立的网络命名空间,但不会配置任何网络接口。这种模式适用于需要完全隔离网络的容器,例如用于安全测试或网络实验的容器。

      docker run -d --name container_name --network none image_name
    • User-defined:Docker 还允许用户创建自定义网络,这可以用于配置特定的网络拓扑或满足特殊需求。自定义网络可以使用不同的网络驱动(如 bridge、overlay、macvlan 等),并可以配置自定义的 IP 地址范围、子网、网关等。

      docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 custom_network_name
      docker run -d --name container_name --network custom_network_name image_name

请注意,在实际应用中,这四种网络模型可以根据需要进行混合和搭配使用,以满足不同的需求。

部署例子

下面是一个使用 Docker Compose 部署 Spring Boot 项目并设置网络的示例:

  1. 创建一个名为 docker-compose.yml 的文件,并添加以下内容:
version: '3'
services:
  myapp:
    build: .
    ports:
      - "8080:8080"
    networks:
      - my-network
networks:
  my-network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.25.0.0/16

在这个文件中,我们定义了一个 myapp 服务,它将构建当前目录下的 Docker 镜像,并将容器的 8080 端口映射到主机的 8080 端口。我们还定义了一个名为 my-network 的自定义网络,它使用桥接驱动程序,并分配了一个名为 172.25.0.0/16 的 IP 地址范围。

  1. 在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件,并添加以下内容:
FROM openjdk:8-jdk-alpine
COPY target/myapp.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

在这个文件中,我们定义了一个基于 Alpine Linux 的 OpenJDK 8 镜像,并将项目的 JAR 文件复制到容器中。我们还定义了一个入口点,它将在容器启动时运行项目的 JAR 文件。

  1. 在 Spring Boot 项目的根目录下运行以下命令构建 Docker 镜像:
docker build -t myapp .

这将使用当前目录下的 Dockerfile 文件构建一个名为 myapp 的 Docker 镜像。

  1. 在 Spring Boot 项目的根目录下运行以下命令启动 Docker 容器:
docker-compose up

这将启动一个名为 myapp 的容器,并将其连接到名为 my-network 的自定义网络中。您可以访问 http://localhost:8080 来访问应用程序。

注意:您需要安装并配置 Docker 和 Docker Compose 才能运行以上命令。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Docker Linux spring 教程 网络
最后更新:2023年 5月 12日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
告别“人工验收”苦海:MetaGPT的RealDevWorld,正改写AI软件开发的未来序曲 腾讯混元MT-7B:打破参数迷思,重塑机器翻译版图 瑞士AI宣言:Apertus如何定义开放大模型 月之暗面Kimi K2-0905:代码与创意的新篇章? 谷歌“蕉”傲登场!AI生图告别“走钟”时代 2025,AI世界模型新篇章:腾讯混元Voyager展望
别再卷万亿参数了,这个4B模型正把AI工作站塞进你的手机全球最佳开放模型!OpenAI开源GPT-OSS,AI界迎来巨变!声音即影像:昆仑万维SkyReels-A3如何叩响内容创作的革命前夜9B参数硬撼72B,GLM-4.1V凭什么搅动AI江湖?2B参数掀翻巨头牌桌:昆仑万维UniPic 2.0的“四两拨千斤”天工V2发布:AI终于撕掉了“纯文本”的标签
Spring MVC核心组件HandlerAdapter 的详解 设计模式:原型设计模式 KubeKey快速上手指南:一步步教你如何使用 Amazon DynamoDB的使用和解析 设计模式:状态设计模式 告别“打工人”模式,AI“全能选手”RoboNeo 来了!
标签聚合
java 大模型 教程 算法 spring deepseek AI 设计模式

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang