Docker 网络

目录

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

  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和端口

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、端口范围等。同样,俩个容器除了网络方面,其他的都还是隔离的。

4.6 自定义网络

docker netword rm YOUR_NAME

4.6.1 使用自定义网络之前

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

如果执行 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

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

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

  • 33
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值