Docker网络模式的介绍以及操作

网络作用介绍

host模式         -net= host                容器和宿主机共享Network namespace(网络名称空间)

containeb模式    -net=container.NAME_or_ID 容器和另外一个容器共享Network namespace(共享ip地址和端口范围)

none模式         -net= none                容器有独立的Network namespace,但并没有对其进行任何网络设置,无法与外部进行交互。如分配veth pair和网桥连接,配置IP等。

bridge模式       -net= bridge              (默认为该模式)

注:docker 0为虚拟网桥,所有的容器会连接到虚拟网桥上(因为虚拟网桥为它们的虚拟网关),虚拟网桥会结合iptable的规则去进行地址映射,把容器地址段映射为宿主机的地址段,用于和宿主机通讯,最后让宿主机连接外网。

Docker的四种网络介绍

host

 1. 在容器内部创建的两个容器A,B,通过docker
    0(相当于小型的局域网,为内部容器的网关)进行内部通信;与外部通信地址映射Nat模式物理网卡ens33
 2. 如果两个内部容器的服务不同,但端口一样,进行外部通信时,进行端口映射成不同的端口进行通信

container

 1. 创建的容器不会创建自己的网卡、设置IP等,而是和一个指定地容器共享IP、端口范围
 2. 这个模式指定新创建的容器和已经存在的一个容器共享一network
    namespace,而不是和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定地容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表还是隔离的。两个容器的进程可以通过loo网卡设备通信

None

 1. 该模式关闭了容器的网络功能
 2. 这种网络模式下容器只有lo回环网口,没有其他的网卡。none 模式可以在容器创建时通过-network=none参数指定
 3. 这种类型的网络无法联网,但是封闭的网络能很好的保证容器的安全性,提高了安全性。

Bridge

 1. 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虛拟网桥,通过docker0网桥及iptables的nat表配置与宿主机通信
 2. 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中
 3. 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端挂载在新创建的容器中,并命名为ethO(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

docker自定义网络

查看网络列表命令

语法: docker network ls

[root@server1 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
4c67ba8a5d4b   bride    bridge    local
bfbf3cdaf20a   host      host      local
f5b7dfaba49b   none      null      local

根据镜像创建容器并指定ip地址

因为本地有镜像直接进行操作

[root@server1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    f6d0b4767a6c   8 weeks ago    133MB
nginx        web       f6d0b4767a6c   8 weeks ago    133MB
centos       latest    300e315adb2f   3 months ago   209MB
centos       7         8652b9f0cb4c   3 months ago   204MB

注:会报错来自守护程序的错误响应,仅在用户定义的网络上支持用户指定的IP地址

root@server1 ~]# docker run -it --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker: Error response from daemon: user specified IP address is supported on user defined networks only.
[root@server1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
add1da23d5f8   centos:7       "/bin/bash"              3 minutes ago    Created                   test1
8ce50b325e19   nginx:latest   "/docker-entrypoint.…"   26 minutes ago   Up 25 minutes   80/tcp    vigorous_haibt

注:创建运行容器手动指定IP地址,不允许,没有权限,违背ip地址分配规则按顺序配置

[root@server1 ~]# docker start add1da23d5f8
Error response from daemon: user specified IP address is supported on user defined networks only
Error: failed to start containers: add1da23d5f8

根据镜像创建容器不指定ip地址

[root@server1 ~]# docker run -itd --name test2 --network bridge centos:7 /bin/bash
28b409b7507edb0b5985a0acd80f1da806b9e6c7b2044b4c2c32481508a193d6
[root@server1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
28b409b7507e   centos:7       "/bin/bash"              8 seconds ago    Up 7 seconds              test2
add1da23d5f8   centos:7       "/bin/bash"              5 minutes ago    Created                   test1

查看已运行容器状态

[root@server1 ~]# docker exec -it 28b409b7507e /bin/bash
[root@28b409b7507e /]# yum -y install net-tools
[root@28b409b7507e /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 3355  bytes 13183087 (12.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2704  bytes 149691 (146.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

自定义网络固定IP

[root@server1 ~]# docker network create  --subnet=172.18.0.0/16 bbb
db0e21443c081aceb3077e147f95a4f0926c54ec8fa9868443d8a6c0a06c4e8e
[root@server1 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
db0e21443c08   bbb       bridge    local 
278425c8e611   bridge    bridge    local
5e6ecd8fa0b5   host      host      local
cd3e31ebb750   none      null      local
[root@server1 ~]# docker run -itd -name test3 --network bbb --ip 172.18.0.100 centos:7 /bin/bash
unknown shorthand flag: 'n' in -name
See 'docker run --help'.
'少- --name'

[root@server1 ~]# docker run -itd  --name test3 --network bbb --ip 172.18.0.100 centos:7 /bin/bash
e6b17bafdb947d3875127146739facda85432a1fb057b7887ecc7618b6fde59e

在这里插入图片描述

[root@server1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
e6b17bafdb94   centos:7       "/bin/bash"              8 seconds ago    Up 8 seconds              test3
28b409b7507e   centos:7       "/bin/bash"              7 minutes ago    Up 7 minutes              test2
add1da23d5f8   centos:7       "/bin/bash"              13 minutes ago   Created                   test1
8ce50b325e19   nginx:latest   "/docker-entrypoint.…"   36 minutes ago   Up 36 minutes   80/tcp    vigorous_haibt

查看容器网络地址

[root@e6b17bafdb94 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.100  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:64  txqueuelen 0  (Ethernet)
        RX packets 3829  bytes 13210252 (12.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3556  bytes 195904 (191.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 90  bytes 8150 (7.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 90  bytes 8150 (7.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

测试网关,网桥网关

[root@e6b17bafdb94 /]# ping 172.18.0.1
PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data.
64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.041 ms


[root@e6b17bafdb94 /]# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.041 ms
64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.041 ms

猜你喜欢

转载自blog.csdn.net/weixin_50344807/article/details/114653282
今日推荐