当前位置: 首页 > news >正文

Docker网络功能

基本网络功能

Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。使用docker network子命令来管理Docker网络。

外部访问容器可通过端口映射实现,启动容器时使用-p参数指定映射关系。-p可多次使用来绑定多个端口。使用docker port命令查看当前映射的端口配置。

容器互联

可以使用--link参数使容器互联。建议将容器加入自定义的Docker网络来连接多个容器。

新建网络

使用docker network create -d bridge my-net命令创建一个网络,其中-d参数指定Docker网络类型,有bridge、overlay等。

容器连接网络

运行容器时,通过--net参数指定要连接的网络。

高级网络配置

docker网络结构如下图所示

快速配置指南

下面是一个跟 Docker 网络相关的命令列表。其中有些命令选项只有在 Docker 服务启动的时候才能配置, 而且不能马上生效。

  • -b BRIDGE 或 --bridge=BRIDGE 指定容器挂载的网桥
  • --bip=CIDR 定制 docker0 的掩码
  • -H SOCKET... 或 --host=SOCKET... Docker 服务端接收命令的通道
  • --icc=true|false 是否支持容器之间进行通信
  • --ip-forward=true|false 请看下文容器之间的通信
  • --iptables=true|false 是否允许 Docker 添加 iptables 规则
  • --mtu=BYTES 容器网络中的 MTU

下面2个命令选项既可以在启动服务时指定,也可以在启动容器时指定。在 Docker 服务启动的时候指定则会成为默认值,后面执行 docker run 时可以覆盖设置的默认值。

  • --dns=IP_ADDRESS... 使用指定的DNS服务器
  • --dns-search=DOMAIN... 指定DNS搜索域

最后这些选项只有在 docker run 执行时使用, 因为它是针对容器的特性内容。

  • -h HOSTNAME 或 --hostname=HOSTNAME 配置容器主机名
  • --link=CONTAINER_NAME:ALIAS 添加到另一个容器的连接
  • --net=bridge|none|container:NAME_or_ID|host 配置容器的桥接模式
  • -p SPEC 或 --publish=SPEC 映射容器端口到宿主主机
  • -P or --publish-all=true|false 映射容器所有端口到宿主主机

配置DNS

配置全部容器的 DNS ,可以在 /etc/docker/daemon.json 文件中增加以下内容。

{"dns" : ["114.114.114.114","8.8.8.8"]
}

实例

创建一个点到点连接,两个容器之间可以直接通信,而不通过主句网桥进行桥接,解决方法是创建一对peer接口分别放到两个容器中,配置成点到点链路类型即可。

启动2个容器,网络模式设置为none,如下:

$ docker run -i -t --rm --net=none base /bin/bash
root@1f1f4c1f931a:/#$ docker run -i -t --rm --net=none base /bin/bash
root@12e343489d2f:/#

找到进程号, 然后创建网络命名空间的跟踪文件。

$ docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a
2989$ docker inspect -f '{{.State.Pid}}' 12e343489d2f
3004$ sudo mkdir -p /var/run/netns
$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004

创建一对 peer 接口, 然后配置路由

$ sudo ip link add A type veth peer name B
$ sudo ip link set A netns 2989
$ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A
$ sudo ip netns exec 2989 ip link set A up
$ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A
$ sudo ip link set B netns 3004
$ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
$ sudo ip netns exec 3004 ip link set B up
$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B

现在这 2 个容器就可以相互 ping 通, 并成功建立连接。

http://www.lryc.cn/news/159233.html

相关文章:

  • 如何入门 AI----如何确定学习目标
  • ABAP中加前导零和去前导零方法
  • 聊聊ShardingSphere是怎么进行sql重写的
  • 软件设计模式系列之二——抽象工厂模式
  • P2719 搞笑世界杯 (期望dp
  • spring cloud新版本使用loadbalancer替代Ribbon
  • 【Git-Exception】Git报错:fatal: unable to auto-detect email address
  • JVM性能优化 —— 类加载器,手动实现类的热加载
  • SSH连接MobaXterm
  • 本地虚机Jumpserver使用域名访问报错 使用IP+端口没有错误
  • 备战计算机二级公共基础知识(五)----数据库设计基础
  • 【excel密码】excel文件加密方法总结:
  • MySQL之用户管理
  • 伪静态web.config常见规则写法与参数介绍说明
  • 使用kubasz快速搭建Kubernetes集群
  • php常用加密算法大全aes、3des、rsa等
  • ubuntu22.04搭建verilator仿真环境
  • python中如何使用正则表达匹配\本身?(文末赠书)
  • Linux学习之MySQL连接查询
  • 【Hello Algorithm】二叉树相关算法
  • ExpressLRS开源代码之工程结构
  • fastjson 1.2.24 反序列化导致任意命令执行漏洞复现
  • 探秘MySQL三个神秘隐藏列(mysql三个隐藏列) rownum、rowid、oid
  • leetcode刷题--数组类
  • Vue3---uni-app--高德地图引用BUG
  • Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录
  • 护航数字政府建设,美创科技成为“数字政府建设赋能计划”成员单位
  • Kafka3.0.0版本——消费者(消费者组原理)
  • 天津web前端培训班 前端是否适合零基础学?
  • Paimon+StarRocks 湖仓一体数据分析方案