一、Docker网络
1.docker0
通过ip addr
命令查看本机网卡ip:
安装docker后,会出现docker0虚拟网卡。此虚拟网卡是通过桥接模式连到物理网卡中。
docker run -d -P --name tomcat1 tomcat # 启动一个tomcat容器
docker exec -it tomcat1 ip addr # 启动容器并执行ip addr命令
现在宿主机ping一下容器ip试试:ping 172.17.0.2
,可以ping通。容器之间进行ip互ping也是可以ping通的。
注:每启动一个容器,docker会给容器分配一个ip。
此时再查看宿主机的ip:
可以看到,这里为容器分配了一个ip。容器中是46:…47,宿主机中是47:…46。这便是通过Linux中的evth-pair技术,将一对虚拟设备接口连接。
容器之间网络连接全部通过docker0虚拟网卡连接。
2.–link参数(不推荐使用)
启动容器时,通过--link
参数后接容器名字:
docker -d -P --name [容器名1] --link [容器名0] [镜像名]
此时容器1便可以ping通容器0。因为docker修改了宿主机的/etc/hosts
文件,将容器1的名定向到了容器0的ip。
3.自定义网络(推荐使用)
为什么要使用自定义网络?正常通过–link创建的容器是不能互相ping通的,使用自定义网络可以实现容器互相ping通,且可以通过容器名字互相ping。
-
docker常见的网络模式有以下几种:
bridge:桥接模式(docker默认) host:和宿主机共享网络 container:容器内连通(不常使用) none:不配置
-
自定义网络也使用bridge模式。
-
开始测试
docker network ls
列出所有的网络
启动容器时,如果不指定--net
参数,则相当于执行以下命令,默认使用docker0:
docker run -d -P --name tomcat1 --net bridge tomcat
现在创建自定义网络:
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet # subnet是子网 gateway是网关 mynet是网络名字
查看网络如下:
docker network inspect mynet
看一下网络详情:
此时通过刚才新建的容器创建容器:docker run -d -P --name tomcat --net mynet tomcat docker run -d -P --name tomcat1 --net mynet tomcat
再查看一下网络详情:
已经可以看到两个容器的信息了。宿主机中也可以看见新建的虚拟网卡。
二、网络连通
现在考虑一个问题:连接到不同的虚拟网卡的容器怎样连接?例如,目前container0和container1连接在docker0网卡上,container2和container3连接在mynet网卡上,如何使container0和container2进行ping通?
下面开始使用docker network connect
命令。
docker network connect mynet container0 # 连通之后将container0容器放到了mynet网络下
# 此时,容器container0有两个ip。容器间已经可以互相ping通。
三、Docker可视化面板
使用一个简单的可视化面板——Portainer。
首先安装Portainer:
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
然后后面注册一下登陆上就可以用了。