Docker 网络配置

Posted cy888888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 网络配置相关的知识,希望对你有一定的参考价值。

Docker 网络配置

Docker 网络

docker网络从覆盖范围可分文单个host上的容器网络和跨多个host的网络。
docker安装时会自动在host创建三个网络

[root@localhost ~]# docker network ls
NETWORK ID          NAME        DRIVER             SCOPE
91f24d00be88           bridge          bridge                local
ecda711e303a           host              host                  local
18bdb4a24230           none             null                   local

none网络

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

[root@localhost ~]# docker run -it --network=none centos:latest /bin/bash

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

host网络

连接到host网络的容器会共享Docker host的网络,容器的网络配置与host完全一样,连主机名也一样,可以通过- -network=host指定。

[root@localhost ~]# docker run -it --network=host centos:latest /bin/bash

直接使用host网络的好处就是性能,如果容器对网络传输效率有较高要求。则可以选择host网络。不便之处就是缺乏灵活性,有端口冲突问题。

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

bridge网络

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

[root@localhost ~]# brctl show

bridge name        bridge id                          STP enabled                  interfaces

docker0                8000.02426206accb              no

virbr0                    8000.5254008f7f41                yes                          virbr0-nic

当前docker0上没有任何其他网络设备,创建一个容器看看变化

[root@localhost ~]# docker run -d centos

[root@localhost ~]# brctl show

bridge name            bridge id                          STP enabled                    interfaces

docker0                    8000.02426206accb              no                             veth4e9b21e

virbr0                        8000.5254008f7f41               yes                            virbr0-nic

一个新的网络接口veth4e9b21e被挂在了docker0上,其就是新建容器的虚拟网卡。

bridge还会自动分配网段和网关

[root@localhost ~]# docker network inspect bridge 

技术图片

 

 容器创建时,docker会自动从这个网段分配一个ip。

自定义容器网络

除了三个自动创建的网络,也可以自定义网络(user-defined)。

Docker 提供三种user-defined网络驱动:bridge,overlay和macvlan。overlay和macvlan用于创建跨主机的网络。

我们可以通过bridge驱动创建默认的bridge网络

[root@localhost ~]# docker network create --driver bridge caoyi_net

a67b27e62fc31468dd04fc9dd9768208de667843f9bfa45b2e9e347a347453cc

可以自己指定IP网段

在创建时指定 - -subent 和 - -gateway 参数:

[root@localhost ~]# docker network create --driver bridge --subnet 172.33.11.0/24 --gateway 172.33.11.254 caoyi_net2

容器若要使用新的网络,只需在启动是通过 - -network 指定:

[root@localhost ~]# docker run -it --network=caoyi_net2 centos:latest /bin/bash

[root@c52c86f5ea27 /]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

             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

10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

             link/ether 02:42:ac:16:10:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0

             inet 172.33.11.1/24 brd 172.33.11.255 scope global eth0

            valid_lft forever preferred_lft forever

容器自动分配的一个IP,也可以通过 - -ip 指定一个静态IP。

[root@localhost ~]# docker run -it --network=caoyi_net2 --ip 172.33.11.200 centos:latest

注:只有使用 - -subent 创建的网络才能指定静态IP

容器间的连通性

两个centos都挂在 caoyi_net2 上,是互通的。

[root@c7244d87d18e /]# ping 172.33.11.2

PING 172.33.11.2 (172.33.11.2) 56(84) bytes of data.

64 bytes from 172.33.11.2: icmp_seq=1 ttl=64 time=0.239 ms

64 bytes from 172.33.11.2: icmp_seq=1 ttl=64 time=0.269 ms

但是两个bridge不同的是无法互通的

[root@c7244d87d18e /]# ping 172.17.0.2

PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.

--- 172.17.0.2 ping statistics ---

3 packets transmitted, 0 received, 100% packet loss, time 2000ms

外部访问容器

使用端口映射

docker 可将容器对外提供服务的端口映射到host的某个端口,外网通过该端口访问容器

[root@localhost ~]# docker run -d -p 80 httpd

[root@localhost ~]# docker port db7017ec361e 80/tcp > 0.0.0.0:32768

[root@localhost ~]# curl 0.0.0.0:32768

<html><body><h1>It works!</h1></body></html>

技术图片

 

以上是关于Docker 网络配置的主要内容,如果未能解决你的问题,请参考以下文章

Docker 网络配置

Docker 网络配置

docker系列之网络配置

Docker6种网络配置详解,网络模式应该这么选

ovs+docker网络配置

Docker网络配置Docker部署分布式项目