docker容器的网络配置,允许docker可以被宿主机以外的其它主机访问以及局域网内可以直接访问docker容器ip
Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求。容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信。
端口映射(局域网,外网此方式均可)。
此种方式是将容器的某个端口映射到宿主机的某个端口,其它主机访问容器提供的服务需要通过宿主机的IP进行访问:
docker run -p 9000:8000 --name centos1_py2 -itd --privileged=true dockerstorage/centos_py2:latest /usr/sbin/init
这种方式是在通过镜像创建容器的时候指定的,如图所示,加入我们在容器centos1_py2中用8000端口运行一个项目,通过此项配置就可以将容器的8000端口映射到宿主机的9000端口,那么其它主机就可以通过 宿主机的ip:9000来访问运行在容器中的项目了。
注:
- 容器有自己的内部网络和 ip 地址(使用
docker inspect
可以获取所有的变量,Docker 还可以有一个可变的网络配置。) - -p 标记可以多次使用来绑定多个端口 如:
- docker run -p 9000:8000 -p 10000:80 --name centos1_py2 -itd --privileged=true dockerstorage/centos_py2:latest /usr/sbin/init
注:也可以使用指定网络方式为host,这个模式下创建出来的容器,直接使用容器宿主机的网络命名空间。
docker run --name centos1_py2 -itd --privileged=true --net=host dockerstorage/centos_py2:latest /usr/sbin/init
这样在容器中运行程序就和在主机中运行的一样,访问主机的ip就可以访问运行的应用
二、容器的IP可以被宿主机以及其它主机直接访问(局域网)。
docker单主机容器通信
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
这些网络模式在相互网络通信方面的对比如下所示:
南北向通信指容器与宿主机外界的访问机制,东西向流量指同一宿主机上,与其他容器相互访问的机制。
host模式
|
1 |
|
bridge模式
|
1 10 11 12 13 14 |
|
none模式
|
其他容器(container)模式
|
1 |
|
用户定义网络模式
10 11 12 13 |
|
docker跨主机容器通信
10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Dokcer通过使用Linux桥接提供容器之间的通信,docker0桥接接口的目的就是方便Docker管理。当Docker daemon启动时需要做以下操作
|
列出当前主机网桥
|
查看当前 docker0 ip
10 |
|
在容器运行时,每个容器都会分配一个特定的虚拟机口并桥接到docker0。每个容器都会配置同docker0 ip相同网段的专用ip 地址,docker0的IP地址被用于所有容器的默认网关。
一般启动的容器中ip默认是172.17.0.1/24网段的。
10 11 12 13 14 |
|
那么能不能在创建容器的时候指定特定的ip呢?这是当然可以实现的!
注意:宿主机的ip路由转发功能一定要打开,否则所创建的容器无法联网!
10 11 12 13 14 15 16 17 18 19 |
|
一、创建容器使用特定范围的IP
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
使用pipework给容器设置一个固定的ip
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
二、不同主机间的容器通信(pipework config docker container ip)
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
|
-----------------------------------------------几个报错出来---------------------------------------------
10 11 12 13 14 15 16 17 18 19 20 21 |
|
-----------------------------------------------------------------------------------------------------------------------------------
其实除了上面使用的pipework工具还,还可以使用虚拟交换机(Open vSwitch)进行docker容器间的网络通信,废话不多说,下面说下Open vSwitch的使用:
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
1 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 10 11 |
|
本文跨主机通信部分转自: