前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023年最新Docker网络讲解保姆级教程

2023年最新Docker网络讲解保姆级教程

作者头像
小锟哥哥
发布2023-11-09 15:37:35
4610
发布2023-11-09 15:37:35
举报
文章被收录于专栏:GoLang全栈

第一章、初步理解网络访问路线

这章我们会从部署一个服务到部署多个服务的挨个讲解网络图。

1、部署一个服务

我们现在在docker里面跑一个nginx服务。

代码语言:javascript
复制
docker run -d --name nginx-1 -p 8081:80

-p<宿主机端口>:<容器端口>

这命令里面 -p 后面的 8081:80 表示,docker对外开放的8081端口映射到docker容器里面的80端口。

现在的一个网络路线图大致是这样的:

所以如果你外面访问不到nginx,很可能是服务器的防火墙挡住了。

2、部署多个服务

现在我们再跑一个nginx服务

代码语言:javascript
复制
docker run -d --name nginx-2 -p 8082:80

于是网络路线图就变成这样了:

3、统一入口

如果按照之前那种方式,一个服务一个端口映射到宿主机上,多少会有点不妥。

我们最常见的就是在这些服务前面加一个网关,这里我们在部署一个nginx-proxy模仿下网关。

创建一个 Nginx 配置文件 **nginx.conf**,将用户的请求路由到不同的容器服务路径。

代码语言:javascript
复制
events {}

http {
    server {
        listen 80;

        location /nginx-1/ {
            proxy_pass http://nginx-1;
        }

        location /nginx-2/ {
            proxy_pass http://nginx-2;
        }
    }
}

启动下:

代码语言:javascript
复制
docker run -d --name nginx-proxy -p 80:80 -v ./nginx.conf:/etc/nginx/nginx.conf nginx

于是网络路线图就变成这样了:

现在你再访问

现在,你可以通过用户的浏览器或命令行工具来测试访问不同的服务路径。

  • 访问第一个服务路径:**http://your-server-ip/nginx-1/**
  • 访问第二个服务路径:**http://your-server-ip/nginx-2/**

到此,就算入门了。

第二章、深入了解docker网络

当涉及到 Docker 网络的管理和配置以及用户访问 Docker 容器中的特定路径时,有一些关键概念和示例可以帮助你更好地理解和使用 Docker 容器的网络功能。

现在我们将深入探讨 Docker 网络的各个方面,包括网络类型、网络创建、连接容器和网络安全,以及如何让用户通过网络访问 Docker 容器内的不同服务路径。

1:Docker 网络基础

在这一章节中,我们将介绍 Docker 网络的基础知识,包括 Docker 网络模型和默认网络设置。

1.1 Docker 网络模型

Docker 网络模型基于虚拟网络和 IP 地址,使容器之间和容器与主机之间能够通信。我们来看一个简单的示例,演示默认的网络设置。

示例 1.1 - 默认网络设置

当你安装 Docker 时,默认会创建一个名为 bridge 的桥接网络。让我们创建一个名为 my-network 的自定义桥接网络并连接一个容器:

代码语言:javascript
复制
# 创建自定义桥接网络
docker network create my-network

# 运行一个容器并将其连接到自定义网络
docker run -d --name my-container --network my-network nginx

# 查看容器的 IP 地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container

现在,**my-container** 已连接到 **my-network**,并分配了一个 IP 地址。你可以在 my-network 内的其他容器中使用该 IP 地址进行通信。

2:Docker 网络类型

在这一章节中,我们将详细讨论 Docker 支持的不同网络类型,以及它们的适用场景。

2.1 桥接网络

Docker 默认使用桥接网络,允许容器之间通信。下面的示例演示如何创建一个简单的桥接网络并连接两个容器:

示例 2.1 - 创建桥接网络

代码语言:javascript
复制
# 创建一个桥接网络
docker network create my-bridge-network

# 运行两个容器并将它们连接到桥接网络
docker run -d --name container-1 --network my-bridge-network nginx
docker run -d --name container-2 --network my-bridge-network nginx

现在 container-1container-2 可以通过它们的容器名称或 IP 地址相互访问。

2.2 主机网络

主机网络模式允许容器使用主机的网络命名空间,即容器共享主机的网络栈。这对于需要最大性能的应用程序非常有用,但可能导致安全风险。

2.3 覆盖网络

覆盖网络适用于多个 Docker 主机上的容器,允许它们在一个私有网络中相互通信。以下是一个示例,演示如何在 Docker Swarm 中使用覆盖网络:

示例 2.3 - 创建覆盖网络

代码语言:javascript
复制
# 初始化 Docker Swarm
docker swarm init

# 创建一个覆盖网络
docker network create -d overlay my-overlay-network

# 在 Swarm 中创建服务,并将其连接到覆盖网络
docker service create --name web-app --network my-overlay-network nginx

现在,**web-app** 服务可以在 Docker Swarm 中的不同节点上运行,并在 my-overlay-network 上相互通信。

2.4 自定义网络

你可以创建自定义网络来满足特定的网络需求,例如在特定网络上运行容器以提高隔离性或性能。这允许你更好地组织容器,并更好地控制网络配置。

3:Docker 网络操作

在这一章节中,我们将讨论如何创建、连接和管理 Docker 网络,以及如何将容器添加到网络中。

3.1 连接容器到网络

使用 docker run 命令时,你可以使用 --network 标志将容器连接到特定网络。以下示例演示如何连接一个容器到一个现有的桥接网络:

示例 3.1 - 连接容器到网络

代码语言:javascript
复制
# 创建一个新的桥接网络
docker network create my-new-bridge-network

# 运行一个容器并将其连接到新网络
docker run -d --name my-container --network my-new-bridge-network nginx

my-container 已连接到 **my-new-bridge-network**,并与该网络上的其他容器进行通信。

3.2 查看网络配置

你可以使用 docker network inspect 命令来查看网络的详细信息,包括连接到网络的容器列表、子网和网关等信息。以下示例演示如何查看网络配置:

示例 3.2 - 查看网络配置

代码语言:javascript
复制
# 查看网络配置
docker network inspect my-new-bridge-network

这将显示有关网络的详细信息,包括容器的配置。

4:Docker 网络安全

在这一章节中,我们将探讨 Docker 网络的安全性,包括如何限制网络访问和保护容器。

4.1 防火墙规则

使用防火墙规则可以限制容器之间的网络通信。以下示例演示如何使用 Docker 防火墙规则允许或拒绝网络流量:

示例 4.1 - Docker 防火墙规则

代码语言:javascript
复制
# 创建允许 ICMP 流量的防火墙规则
docker network create my-firewall-network
docker network ls # 查看网络列表

# 添加防火墙规则,允许 ICMP 流量
docker network update --internal=false --opt com.docker.network.bridge.enable_icc=true --opt com.docker.network.bridge.enable_ip_masquerade=true --opt com.docker.network.bridge.host_binding_ipv4=0.0.0.0 --opt com.docker.network.bridge.name=docker0 my-firewall-network

# 运行一个容器并连接到带有防火墙规则的网络
docker run -d --name my-container --network my-firewall-network nginx

这将允许 my-containermy-firewall-network 上的其他容器上发送 ICMP 流量。

4.2 容器网络加密

在敏感数据传输的情况下,你可以考虑使用容器网络加密来保护数据传输的机密性。以下示例演示如何创建一个使用 TLS 加密的 Docker 网络:

示例 4.2 - 使用 TLS 加密的 Docker 网络

代码语言:javascript
复制
# 创建一个具有 TLS 加密的 Docker 网络
docker network create --driver overlay --opt com.docker.network.driver.mtu=1450 --opt com.docker.network.driver.secrets=secret_name my-encrypted-network

# 运行一个服务并将其连接到加密网络
docker service create --network my-encrypted-network --name web-app --secret source=my-secret,target=/secret nginx

通过这个示例,容器之间的通信将通过 TLS 加密来保护数据传输的机密性。

5:实际应用

在这一章节中,我们将探讨 Docker 网络在实际应用中的用途,包括容器编排、微服务架构和多层应用程序。

5.1 Docker Swarm

Docker Swarm 是 Docker 提供的容器编排工具,它充分利用了 Docker 网络功能来协调多个容器之间的通信。

5.2 微服务架构

在微服务架构中,容器的网络设置至关重要,因为多个微服务需要相互通信。Docker 网络可以帮助实现微服务之间的无缝通信。

5.3 多层应用程序

对于多层应用程序,不同层级的容器需要相互通信。Docker 网络可以帮助构建多层应用程序的复杂网络拓扑。

你学废了么?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一章、初步理解网络访问路线
    • 1、部署一个服务
      • 2、部署多个服务
        • 3、统一入口
        • 第二章、深入了解docker网络
        • 1:Docker 网络基础
          • 1.1 Docker 网络模型
          • 2:Docker 网络类型
            • 2.1 桥接网络
              • 2.2 主机网络
                • 2.3 覆盖网络
                  • 2.4 自定义网络
                  • 3:Docker 网络操作
                    • 3.1 连接容器到网络
                      • 3.2 查看网络配置
                      • 4:Docker 网络安全
                        • 4.1 防火墙规则
                          • 4.2 容器网络加密
                          • 5:实际应用
                            • 5.1 Docker Swarm
                              • 5.2 微服务架构
                                • 5.3 多层应用程序
                                相关产品与服务
                                容器镜像服务
                                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档