首页 > 其他分享 >Docker网络

Docker网络

时间:2024-07-03 16:28:10浏览次数:17  
标签:容器 network -- 宿主机 网络 ff Docker

docker网络的5种模式
none

在使用 none 模式后,Docker 容器不会进行任何网络配置,没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用

none网络特点

使用参数 --network none 指定
默认无网络功能,无法和外部通信
无法实现端口映射
适用于测试环境
host

直接使用宿主机的网卡和IP地址, 此模式由于直接使用宿主机的网络无需转换,网络性能最高,但是各容器内使用的端口不能相同,适用 于运行容器端口比较固定的业务

host网络特点

使用参数 --network host 指定
共享宿主机网络
各容器网络无隔离
网络性能无损耗
网络故障排除相对简单
容易产生端口冲突
网络资源无法分别统计
不支持端口映射
[root@kv1 ~]#docker run -it --rm  --network host alpine:20240329
/ #
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP qlen 1000
    link/ether 00:0c:29:a5:08:ac brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.10/24 scope global secondary etho:1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea5:8ac/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP qlen 1000
    link/ether 00:0c:29:a5:08:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.100/24 brd 192.168.10.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea5:8b6/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:99:0f:fd:03 brd ff:ff:ff:ff:ff:ff
    inet 172.27.0.1/24 brd 172.27.0.255 scope global docker0
       valid_lft forever preferred_lft forever

bridge

默认模式

会创建容器为每一个容器分配自己的网络信息,并将容器连接到一个虚拟网桥与外界通信,可以和外部网络之间进行通信,通过SNAT访问外网,使用DNAT可以让容器被外部主机访问

此模式宿主机需要启动ip_forward功能

bridge网络特点:

网络资源隔离: 不同宿主机的容器无法直接通信,各自使用独立网络
无需手动配置: 容器默认自动获取172.17.0.0/16的IP地址,此地址可以修改
可访问外网: 利用宿主机的物理网卡,SNAT连接外网
外部主机无法直接访问容器: 可以通过配置DNAT接受外网的访问
低性能较低: 因为可通过NAT,网络转换带来更的损耗
端口管理繁琐: 每个容器必须手动指定唯一的端口,容器产生端口冲容

修改Docker网络地址

方式一1.修改桥接地址

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
--bip=10.100.0.1/24 

方式二2.修改Bridge网络配置

[root@ubuntu1804 ~]#vim /etc/docker/daemon.json
{
  "hosts": ["tcp://0.0.0.0:2375", "fd://"],
  "bip": "192.168.100.100/24",         #分配docker0网卡的IP,24是容器IP的netmask
  "fixed-cidr": "192.168.100.128/26", #分配容器IP范围,26不是容器IP的子网掩码,只表示地址范围
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500,
  "default-gateway": "192.168.100.200",  #网关必须和bip在同一个网段
  "default-gateway-v6": "2001:db8:abcd::89",
  "dns": [ "1.1.1.1", "8.8.8.8"]
}

container

用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网络,新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个被指定的已经存在的容器共享IP和端口范围,因此这个容器的端口不能和被指定容器的端口冲突,除了网络之外的文件系统、进程信息等仍然保 持相互隔离,两个容器的尽程可以通过lo网卡进行通信

container模式特点

  • 使用参数 –-network container:名称或ID 指定
  • 与宿主机网络空间隔离
  • 空器间共享网络空间,直接使用对方的网络 第一个容器的网络可能是bridge,或none,或者host,而第二个容器模式依赖于第一个容器,它们共享网络
  • 如果第一个容器停止,将导致无法创建第二个容器
  • 第二个容器可以直接使用127.0.0.1访问第一个容器
  • 适合频繁的容器间的网络通信
  • 默认不支持端口映射,较少使用

自定义网络模式

使用自定义的网段地址,网关等信息,实现不用集群应用的独立网络管理,在同一个网络内,可以直接使用容器名相互访问,非常便利

注意:自定义网络内的容器可以直接通过容器名进行相互的访问,无需使用--link

[root@master1 ~]#docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.

创建自定义网络

docker network create -d <mode> --subnet <CIDR> --gateway <网关> <自定义网络名称>
#注意mode不支持host和none,默认是bridge模式
-d <mode> 可省略,默认为bridge

查看自定义网络信息

docker network inspect <自定义网络名称或网络ID>

引用自定义网络

docker run --network <自定义网络名称> <镜像名称>
docker run --net <自定义网络名称> --ip <指定静态IP> <镜像名称>
#注意:静态IP只支持自定义网络模型
#指定自定义网络中的容器的别名
docker run --network <自定义网络名称> --network-alias list <镜像名称>

删除自定义网络

doccker network rm <自定义网络名称或网络ID>

注意:内置的三个网络无法删除

同一个宿主机之间不同网络的容器通信

开两个容器,一个使用自定义网络容器,一个使用默认bridge网络容器,默认因iptables 规则导致无法通信

1.修改iptables实现同意宿主机上的不同网络的容器间通信
2.使用docker network connect命令实现同一宿主机不同网络的容器间相互通信,将container连入指定的network中,使此container可以与network中的其他容器进行通信
docker network connect [OPTIONS] NETWORK CONTAINER
Connect a container to a network
Options:
      --alias strings           Add network-scoped alias for the container
      --driver-opt strings     driver options for the network
      --ip string               IPv4 address (e.g., 172.30.100.104)
      --ip6 string             IPv6 address (e.g., 2001:db8::33)
      --link list               Add link to another container
      --link-local-ip strings   Add a link-local address for the container
将container与指定的network断开连接,使此container可以与container中的其他容器进行无法通信
如果将容器从自定义的网络删除,将加入默认的网络,即docker0网桥中,获取172.17.0.0/16
docker network disconnect [OPTIONS] NETWORK CONTAINER
Disconnect a container from a network
Options:
  -f, --force   Force the container to disconnect from a network

例如test1和test2容器默认无法通信,让默认网络中容器test1可以连通自定义网络test-net的容器test2,之后在test1容器内可以看到新添加了一个网卡,并且分配了test-net网络中的IP信息,test1可以连接test2容器,但test2容器没有变化,仍然无法连接test1,将自定义网络中的容器test2也加入到默认网络中,使之和默认网络中的容器test1通信 ,确认自定义网络的容器test2中添加了新网卡,并设置默认网络的IP信息 ,相当于test1和test2各添加了新网卡。

实现跨宿主机的容器之间网络互联

同一个宿主机之间的各个容器之间是可以直接通信的,但是如果访问到另外一台宿主机的容器,默认是不能通信的 利用桥接实现跨宿主机的容器间互联 利用NAT实现跨主机的容器间互联,在宿主机上做一个网络路由就可以实现A宿主机的容器访问B主机的容器的目的(此方式只适合小型网络,复杂的网络可以使用其他网络插件:flannel和calico)

标签:容器,network,--,宿主机,网络,ff,Docker
From: https://blog.csdn.net/weixin_66575196/article/details/140155656

相关文章

  • dockerfile构建镜像
    dockerfile构建镜像镜像是多层存储,每一层在前一层的基础上进行修改;容器也是多层存储,以镜像为基础层,在其基础上加一层作为容器运行时的存储层。要求1.docker会逐行读取dockerfile中每一行的指令,按顺序解析,实现images的自动构建2.通过dockerbuild命令构建镜像3.dockerfile......
  • 使用国内源安装新版docker(2024.7.3)
    前言最近dockerhub已经不能访问了,使用原先的方式安装docker,服务器上也总是连接不上,所以找了种可以在国内正常安装新版docker的方式适用系统:centos71.先删除本机旧的或者残留的dockersudoyumremovedocker\docker-client\docker-client......
  • Golang开发:构建支持并发的网络爬虫
    Golang开发:构建支持并发的网络爬虫随着互联网的快速发展,获取网络数据成为了许多应用场景中的关键需求。网络爬虫作为一种自动化获取网络数据的工具,也因此迅速崛起。而为了应对日益庞大的网络数据,开发支持并发的爬虫成为了必要的选择。本文将介绍如何使用Golang编写一个支持......
  • 使用qt 获取一张网络图片,并将这张图片显示在qml 上
    #include<QGuiApplication>#include<QQmlApplicationEngine>#include<QNetworkAccessManager>#include<QNetworkReply>#include<QUrl>#include<QImage>#include<QQuickImageProvider>classImageProvider:publicQQuickI......
  • 容器自动化:docker-compose
    ansible一键部署docker-compus+lnmp+lnmt项目一、docker-compose我们知道使用一个dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排,服务编排有多种技术方案。1.1、docker-compose简介docker-compose项目是docker官方的开源项目,负责实现......
  • ros2 jazzy docker环境安装
    dockerhub限制国内访问了,需要配置下,参考:https://github.com/cmliu/CF-Workers-docker.io/issues/8sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<EOF{"registry-mirrors":["https://hub.uuuadc.top","https......
  • 昇思25天学习打卡营第10天|xkd007|计算机视觉应用实践(1)-FCN(全卷积网络)图像语义分割
    FCN图像语义分割全卷积网络(FullyConvolutionalNetworks,FCN)是UCBerkeley的JonathanLong等人于2015年在FullyConvolutionalNetworksforSemanticSegmentation(点击可下载此论文)一文中提出的用于图像语义分割的一种框架。FCN是首个端到端(endtoend)进行像素级(pixellevel......
  • S1200通讯网络知识和应用
    ......
  • linux安装docker
    以下命令均以root权限执行卸载docker旧版本yumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotatedocker-logrotatedocker-selinuxdocker-engine-selinuxdocker-engine安装相关工具类yuminstall-yyum-utilsdev......
  • debian 12 基于清华源安装docker
    清华源docker地址:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/安装docker之前需要添加GPG公钥,主要是用来验证安装文件是否被篡改,先安装工具:curl和gnupg2,两个工具。aptinstallcurlgnupg2下面是清华源GPG地址,下载和添加。curl-fsSLhttps://mirrors.t......