Docker 网络

2024-07-19 1497阅读

目录

1. 是什么

1.1 Docker 不启动,默认网络情况

1.2 Docker 启动后,网络情况

2. 能干什么

3. 常用的基本命令

4. 网络模式

4.1 总体介绍

4.2. bridge

4.2.1 是什么

4.2.2 深入理解bridge

4.3 host

4.3.1 是什么

4.3.2 深入理解host

4.4. none

4.4.1 是什么

4.5. container

4.5.1 是什么

4.6 自定义网络

4.6.1 使用自定义网络之前

4.6.2 使用自定义网络之后

4.6.2.1 新建自定义网络

4.6.2.2 新建容器加入自定义网络


1. 是什么

1.1 Docker 不启动,默认网络情况

执行ifconfig命令会出现3个东西:

  1. ens33:本地宿主机的地址
  2. lo:本地回环链路
  3. virbr0:在CentOS7的安装过程中如果有选择相关虚拟化的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡:它还有一个固定的默认IP地址:192.168.122.1),是做虚拟机网桥使用的,其作用是为连接其上的虚拟网卡提供NAT访问外网的功能。

1.2 Docker 启动后,网络情况

执行ifconfig命令,会发现除了上面3个外,还有一个docker0的虚拟网桥。

通过docker0这个虚拟网桥和宿主机以及容器和容器之间docker的网络通信。

2. 能干什么

容器间的互联和通信以及端口映射

容器IP变动时候可以通过服务名直接网络通信,而不受到影响

3. 常用的基本命令

[root@192 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
915418bfd4c2   bridge    bridge    local
4efb24f4052c   host      host      local
00b385ce1061   none      null      local
[root@192 ~]# 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.

4. 网络模式

4.1 总体介绍

网桥模式     

简介命令
bridge为每一个容器分配、设置IP等,并将容器连接到一个docker0的虚拟网桥,默认为该模式--network bridge
host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口--network host
none容器有独立的network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接等--network nonw
container新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口等--network container:NAME或容器ID

docker容器内部的ip是由可能会变的。

4.2. bridge

[root@192 ~]# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "915418bfd4c23739d46c6a4e18c3e37caeda86d1edbe46761f4ffdc68a36d35c",
        "Created": "2024-03-27T15:47:41.733889499+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },

4.2.1 是什么

docker服务默认会创建一个docker0的网桥(其上有一个docker0内部接口),该桥接网络的名称为docker0,它在内核层联通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥互相通信

4.2.2 深入理解bridge

Docker 网络

  1. Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时时会根据Docker网桥的的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能通过容器的Container-IP直接通信。
  2. docker run 的时候,没有指定network的话,默认使用的网桥模式就是bridge。在宿主机ifconfig就可以看到docker0和自己create的network eth0 eth1 eth2...代表网卡一、网卡二、网..,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址。
  3. 网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。

    3.1. 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通

    3.2. 每个容器实例内部也有一块网卡,每个接口叫eth0

    3.3. docker0上面的每个veth匹配某个容器实例内部的eth0,俩俩配对,一一匹配

通过上述,将宿主机上的所有容器都连接到这个内部网络上,俩个容器在同一个网络下,会从这个网关下各自拿到分配的ip。此时俩个容器的网络是互通的

4.3 host

4.3.1 是什么

直接使用宿主机的IP地址与外界进行通信,不在需要额外的NAT转换。

4.3.2 深入理解host

容器将不会获得一个独立的Network Namespace,而是和宿主机公用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

Docker 网络

4.4. none

4.4.1 是什么

禁用网络功能,只有lo标志(就是127.0.0.1表示本地回环)

在none模式下,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo。需要我们自己为Docker容器添加网卡、配置IP等。

4.5. container

4.5.1 是什么

新建的容器和已经存在的容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网络、配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,俩个容器除了网络方面,其他的都还是隔离的。

Docker 网络

4.6 自定义网络

docker netword rm YOUR_NAME

4.6.1 使用自定义网络之前

场景:在同一宿主机上同一image启动俩个tomcat容器,名字分别是tomcat81和tomcat82。启动之后分别进入tomcat81和tomcat82容器中查看自己的ip地址,然后通过IP地址ping对方,这是没有问题。然后通过服务名ping对方,ping不通。

Docker 网络

Docker 网络

如果执行 ip addr 或者 ping xxx 找不到命名,执行下面命令。

apt update

apt install -y iproute2

apt-get install iputils-ping

4.6.2 使用自定义网络之后

场景:在同一宿主机上同一image上通过 --network YOUR_NETWORK_NAME 启动俩个tomcat容器,名字分别是tomcat83和tomcat84。启动之后分别进入tomcat83和tomcat84容器中,然后通过服务名ping对方,可以ping通。

自定义桥接网络默认使用的是桥接网络bridge。

4.6.2.1 新建自定义网络
docker network create dylan_network

Docker 网络

4.6.2.2 新建容器加入自定义网络
docker run -d -p 8083:8080 --network dylan_network --name tomcat83 tomcat
docker run -d -p 8084:8080 --network dylan_network --name tomcat84 tomcat

Docker 网络

结论:自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能ping通)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]