墨风如雪博客

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

docker 网络模式的使用详解

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

墨风如雪

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

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

文章评论

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

墨风如雪

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

最新 热点 随机
最新 热点 随机
告别机械感!OpenAudio S1让AI声音活起来 Sora触手可及!微软必应AI视频生成器,全民创作时代来临? 阿里WebAgent开源:引领自主搜索新纪元 重磅炸弹!字节跳动开源BAGEL:70亿参数,统一多模态理解与生成,AI“全能王”诞生记! 小米MiMo-VL:7B参数,怎么就成了多模态界的“越级打怪王”? 炸裂!DeepSeek 8B 量化版降临:告别显存焦虑,你的 3080 Ti 也能玩转顶级大模型了!
炸裂!微软这门免费AI Agent新手课,GitHub近2万星,简直是宝藏!ComfyUI“打通任督二脉”:直接调用Veo2、GPT-4o等65大模型!一键串联你的AI工作流AI圈炸锅了!Mistral Medium 3:性能 SOTA,成本打骨折,企业玩家的新宠?字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器告别“微信黑箱”!Chatlog:让你的聊天记录也能拥有“AI大脑”!字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码?
设计模式:模板方法模式 Java多线程编程中的ReentrantLock详解 spring 当中Bean Factory的生命周期详解 320亿参数逆袭6710亿!阿里QwQ-32B开源引爆AI效率革命:单卡运行、成本降60倍,国产芯片突围AGI Java 中 synchronized 的使用方法及注意事项 Java 企业级应用服务器Tomcat详解
标签聚合
java 动态规划 AI spring 算法 教程 设计模式 deepseek

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

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策