墨风如雪博客

  • 源码小店
  • 导航站
  • 登录
  • java
  • 资源分享
让AI使用变得如此简单
  1. 首页
  2. docker
  3. 正文

docker 网络模式的使用详解

2023年 5月 16日 210点热度 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日

墨风如雪

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

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

文章评论

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

墨风如雪

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

最新 热点 随机
最新 热点 随机
AI“游侠”降临A股:16个“大脑”组团“炒股”,30秒“算命”市场! 视频魔法来了!AI能实时“变脸”直播,连游戏画面也能瞬间换装? 告别“听指令”,AI要“自己动手”了!ChatGPT Agent,AI界的“全能选手”已上线! 8B 模型吊打 671B?数学证明界“卷王”Goedel-Prover-V2 来了! Kiro来了!亚马逊放大招,软件开发要被AI“绑架”了吗? 火速围观!Trae IDE 迎来两大明星模型,Kimi K2 硬核登场,Grok-4 (Beta) 闪耀国际!
昆仑万维扔出王炸:32B模型干翻671B,代码界迎来全能修理工!8亿参数撬动实时混音!谷歌开源“口袋DJ”,人人都能玩转音乐告别插件时代!OmniGen2:一个模型,通吃所有AIGC神操作2000万次呼唤背后,蓝骑士有了“赛博外挂”智能触手可及:Google Gemma-3n 系列模型,让万物皆能“思考”AI圈大地震!120亿参数的FLUX编辑器开源,你的显卡准备好了吗?
万亿参数炸裂!Kimi K2 降临,中国 AI 新时代开启? 设计模式:备忘录设计模式 每日一题|剑指Offer地狱级难题!正则表达式匹配,你能扛住吗? 告别AI视频“变脸怪”!腾讯混元Hunyuan Custom重磅开源,主体一致性“王炸”来了! 不再只是建议:Augment Agent 想成为真正帮你干活的 AI 开发伙伴! 重塑AI推理格局?微软Phi-4模型震撼发布:轻量化性能炸裂
标签聚合
AI java 大模型 算法 deepseek 教程 spring 设计模式

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

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策