Docker网络概述

简述

大量的互联网应用服务需要多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合.

docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络docker 目前提供了映射容器端口到宿主主机和容器互联机制来为容器提供网络服务,在启动容器的时候,如果不指定参数,在容器外部是没有办法通过网络来访问容器内部的网络应用和服务的。

安装Docker时它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host.

host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

None:该模式关闭了容器的网络功能。

Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

这三种网络模式都无需改动,真正需要配置的是自定义网络。

docker–none

none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创时,可以通过 --network=none 指定使用 none 网络。

docker–none的应用

封闭的网络意味着隔离,一些对安全性要求高并且不需要联网的应用可以使用none 网络

docker–host

连接到 host 网络的容器,共享 docker host 的网络栈,容器的网络配置host 完全一样。可以通过 --network=host 指定使用 host 网络

直接使用 Docker host 的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,就可以选择 host 网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host上已经使用的端口就不能再用了。

Docker host 的另一个用途是让容器可以直接配置 host 网路。比如某些跨host 的网络解决方案,其本身也是以容器方式运行的,这些方案需要对网络进行配置,比如管理 iptables

docker–bridge

docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定–network,创建的容器默认会挂到 docker0 上

创建自定义网络

运行一个容器并连接到新建的my-net网络

docker run -it --name centos1 --network my-net centos

如果brctl show命令发生错误,则是没有下载相关服务,执行以下操作即可。

yum install bridge-utils -y

创建新的容器并连接刚刚创建的my-net1

docker run -itd --network my-net1 --name box1 centos
docker run -itd --network my-net1 --name box2 centos

利用bridge驱动创建网络

通过 bridge 驱动创建类似前面默认的bridge 网络,两者并不相同
创建自定义网络,利用bridge驱动创建名为my-net1网桥(docker会自动分配网段):

docker network create --driver bridge my-net1  

自定义网络网关、子网

docker network create --driver bridge --subnet 10.10.1.0/24 --gateway 10.10.1.1 my-net2

进入容器之后查看会发现已经分配好IP

[root@a0d126e89097 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.1.2  netmask 255.255.255.0  broadcast 10.10.1.255
        ether 02:42:0a:0a:01:02  txqueuelen 0  (Ethernet)
        RX packets 3357  bytes 10723930 (10.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2462  bytes 136823 (133.6 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 79  bytes 6987 (6.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 79  bytes 6987 (6.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

给定容器特定IP

docker run -it --network=my-net2 --ip 10.10.1.200 centos

让已启动的centos容器,可以连接到my-net1

docker network connect my-net1 a0d126e89097(容器ID)

之后进入容器后查看是否连接
docker attach a0d126e89097
ifconfig
发现多了一个eth1

还可以通过设置容器名来进行ping通

docker run -itd --network my-net2 --name chen1 centos
docker run -itd --network my-net2 --name chen2 centos

docker ps

[root@chen3 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
429216fd71ae        centos              "/bin/bash"         About a minute ago   Up About a minute                       chen2
c83562060fdf        centos              "/bin/bash"         About a minute ago   Up About a minute                       chen1


docker attach 429216fd71ae
[root@chen3 ~]# docker attach 429216fd71ae
[root@429216fd71ae /]# ping chen1
PING chen1 (10.10.1.2) 56(84) bytes of data.
64 bytes from chen1.my-net2 (10.10.1.2): icmp_seq=1 ttl=64 time=0.219 ms
64 bytes from chen1.my-net2 (10.10.1.2): icmp_seq=2 ttl=64 time=0.121 ms
^C
--- chen1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.121/0.170/0.219/0.049 ms

容器之间的互通

创建一个db容器

docker run -itd --name dbserver centos

创建一个web容器

docker run -itd --name web --link dbserver:dblink centos /bin/bash

冒号后面是取名,可以随意取名

进入web容器查看能否ping通

docker attach web
ping dbserver
exit


但是在db中ping web是无法ping通的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值