前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 入门之网络

Docker 入门之网络

作者头像
菜菜cc
发布2022-11-15 21:36:20
4350
发布2022-11-15 21:36:20
举报
文章被收录于专栏:菜菜的技术博客

Docker 网络使用了 Linux 的 network namespace 机制,隔离了网络设备, ip 协议栈,路由表以及防火墙规则。

默认网络模式

每一个安装了 Docker 的 Linux 主机都会创建一个名为 docker0 的虚拟网桥,该虚拟网桥作为所有容器的默认网关。

在默认的网络模式下,虚拟网桥的工作方式和物理交换机类似,主机上的所有容器通过 docker0 连接在了一个二层网络中。

每启动一个容器,Docker 都会创建一个虚拟网卡, 并根据 Docker 网桥所在的网段来分配给容器一个未使用的 ip 地址,称之为容器 ip。在宿主机和容器内分别创建了一个虚拟接口,它们彼此连通,这对接口称之为 veth pair。

默认情况下的网络模式称之为 bridge 模式,该模式为 docker 的默认模式。在启动 docker 时可以使用--net指定容器的网络模式

代码语言:javascript
复制
sudo docker run -it --net=bridge -p 9001:6379 redis:alpine

bridge 模式的网络转发如下图所示

四种网络模式

除了 brideg 模式,docker 还支持 container, host, none 模式

网络模式

配置

说明

bridge

--net=bridge

默认模式

container

--net=container:name或id

容器和另外一个容器共享 network namespacek8s 中的 pod 就是多个容器共享一个 network namespace

host

--net=host

容器和宿主机共享 network namespace

none

--net=none

不配置网络,用户可以稍后进入容器,自行配置

自定义网络

默认主机中创建了三个网络, 可通过network ls命令查看

代码语言:javascript
复制
sudo docker network ls

用户可通过network create命令创建自定义网络

代码语言:javascript
复制
# 创建自定义网络 指定 bridge 模式,网段为 192.168.0.0/16, 网关为 192.168.0.0/16, 命名为 mynet
sudo docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

启动容器可以指定连接到自定义网络

代码语言:javascript
复制
# 启动两个 redis 容器,分别命名为 redis1, redis2
sudo docker run -it -d --name redis1 -P --net mynet redis:alpine
sudo docker run -it -d --name redis2 -P --net mynet redis:alpine

通过network inspect命令可以查看一个网络的详情

代码语言:javascript
复制
# 查看 mynet 网络详细信息,参数为网络 id 或网络名,参数可通过 network ls 命令查到
sudo docker inspect e37aeda5814a

可以看到该网络下连接了两个容器

在以前可使用 --link 参数来使容器互联,但在自定义网络下默认就可以使用容器名进行容器的互联,内部已经维护好了容器名和 ip 的对应关系

代码语言:javascript
复制
# 在 redis1 容器中访问 redis2 容器
sudo docker exec -it redis1 ping redis2

注:默认的 bridge 网络不支持通过容器名进行互联

默认情况下两个网络是隔离的,如果需要让两个网络下的容器能够互相访问,可以使用network connect命令将容器连接到另一个网络

在默认的 bridge 网络下创建一个 redis3 容器用于演示

代码语言:javascript
复制
sudo docker run -it -d -P --name redis3 --net bridge redis:alpine

默认情况下,两个不同网络的容器无法访问

将 redis3 容器加入到 mynet 网络中

代码语言:javascript
复制
# docker network connect 网络名或id 容器名或id
sudo docker network connect mynet redis3

加入后就可以成功访问了

查看 mynet 网络信息和 ip 信息后发现,redis3 容器被分配了一个 mynet 的网络接口和 ip 地址

本文作者: Ifan Tsai  (菜菜)

本文链接: https://cloud.tencent.com/developer/article/2164601

版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 默认网络模式
  • 四种网络模式
  • 自定义网络
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档