docker网络
容器网络分类
查看当前网络:
[root@yixuan ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
9b902ee3eafb bridge bridge local
140a9ff4bb94 host host local
d1210426b3b0 none null local
docker安装后,默认会创建三种网络类型,bridge、host和none
1、bridge:网络桥接
默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址。
2、none:无指定网络
启动容器时,可以通过--network=none,docker容器不会分配局域网ip
3、host:主机网络
docker容器和主机共用一个ip地址。
使用host网络创建容器:
[root@yixuan ~]# docker run -it --name testnginx2 --net host 98ebf73ab
[root@yixuan ~]# netstat -lntp | grep 80
tcp6 0 0 :::80 :::* LISTEN 3237/docker-proxy
浏览器访问宿主ip地址
4、固定ip:
创建固定Ip的容器:
4.1、创建自定义网络类型,并且指定网段
[root@yixuan ~]# docker network create --subnet=192.168.0.0/16 staticnet
4efd309244c6ad70eda2d047a818a3aec5b162f5ca29fb6024c09a5efbf15854
通过docker network ls可以查看到网络类型中多了一个staticnet:
[root@yixuan ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
9b902ee3eafb bridge bridge local
140a9ff4bb94 host host local
d1210426b3b0 none null local
4efd309244c6 staticnet bridge local
4.2、使用新的网络类型创建并启动容器
[root@yixuan ~]# docker run -itd --name userserver --net staticnet --ip 192.168.0.2 daocloud.io/library/centos:7
通过docker inspect可以查看容器ip为192.168.0.2:
[root@yixuan ~]# docker inspect userserver | grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "192.168.0.2",
关闭容器并重启,发现容器ip并未发生改变
异主容器互联
方式1、路由方式
小规模docker环境大部分运行在单台主机上,如果公司大规模采用docker,那么多个宿主机上的docker如何互联
Docker默认的内部ip为172.17.42.0网段,所以必须要修改其中一台的默认网段以免ip冲突。
注:docker版本为1.13
1.在docker-server1上面操作----192.168.246.141
[root@docker-server1 ~]# docker pull daocloud.io/library/centos
[root@docker-server1 ~]# vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS=--bip=172.17.0.1/16
[root@docker-server1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@docker-server1 ~]# sysctl -p
[root@docker-server1 ~]# reboot
[root@docker-server1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/centos latest 0f3e07c0138f 3 weeks ago 220MB
[root@docker-server1 ~]# docker run -it --name centos 0f3e07c0138f /bin/bash
[root@ef1a4d6be97f /]#
[root@docker-server1 ~]# docker inspect centos | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
===============================================
2.docker-server2(192.168.246.143)上:
[root@docker-server2 ~]# vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS=--bip=172.18.0.1/16
[root@docker-server2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@docker-server2 ~]# sysctl -p
[root@docker-server2 ~]# reboot
[root@docker-server2 ~]# systemctl daemon-reload
[root@docker-server2 ~]# systemctl restart docker
[root@docker-server2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/centos latest 0f3e07c0138f 3 weeks ago 220MB
[root@docker-server2 ~]# docker run -it --name centos 0f3e07c0138f /bin/bash
[root@c84a8c704d03 /]#
[root@docker-server2 ~]# docker inspect c | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.18.0.2",
"IPAddress": "172.18.0.2",
添加路由:
[root@docker-server1 ~]# route add -net 172.18.0.0/16 gw 192.168.246.143
[root@docker-server2 ~]# route add -net 172.17.0.0/16 gw 192.168.246.141
验证:
现在两台宿主机里的容器就可以通信了。
方式二、open vswitch
如果要在生产和测试环境大规模采用docker技术,首先就需要解决不同物理机建的docker容器互联问题。
centos7环境下可以采用open vswitch实现不同物理服务器上的docker容器互联