ifconfig
通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。
docker0是Linux虚拟网桥。
Linux虚拟网桥的特点:
brctl show
docker run --name centos7 -it centos:7 /bin/bash
yum -y install vim net-tools ifconfig
修改默认的配置文件 /etc/docker/daemon.json对Docker进行配置。
如果没有直接创建
systemctl stop docker
vim /etc/docker/daemon.json
{
"bip":"192.168.10.1/16"
}
systemctl restart docker
docker network ls
docker network create --driver bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 net-test
报错:Error response from daemon: Pool overlaps with other one on this address space
这是因为新创建的网络自定义的子网ip与已有的网络子网ip冲突。
只需要重新定义子网ip段就行
docker network create --driver bridge --subnet 10.22.1.0/24 --gateway 10.22.1.1 net-test
docker network ls
docker network inspect 网桥名称
docker network inspect net-test
当用ifconfig命令查看的时候,显示的并不是net-test,而是br-ed63c1fd55b9
如需能在ifconfig中显示网桥名称,添加选项com.docker.network.bridge.name
docker network create --driver bridge --subnet 25.168.1.0/24 --gateway 25.168.1.1 net-test1 -o com.docker.network.bridge.name=net-test1
docker run -it --network=net-test1 -p 8080:80 centos:7 /bin/bash
在同一宿主机下,docker的容器是通过虚拟网桥来进行连接的。那么在默认情况下,在同一宿主机中运行的容器都是可以互相连接的。
–icc=true 默认
docker run -it --name cct1 mycentos:1.0
docker run -it --name cct2 mycentos:1.0
–link
docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]
CONTAINER_NAME: 需要连接的容器名字
ALIAS: 在容器中连接的代号(别名随机取)
docker run -it --name cct4 mycentos:1.0
docker run -it --name cct5 --link=cct4:web mycentos:1.0
如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。
通过自定义 虚拟网桥 来实现指定容器间的互联 隔离
参考: 本文的 自定义docker虚拟网桥
docker run -it --rm --name test6 --network net-test mycentos:1.0
docker run -it --rm --name test7 --network net-test mycentos:1.0
docker0和自定义网络肯定不通,我们使用自定义网络的好处就是网络隔离。
但是在实际的工作中,比如我们部署了mysql使用了一个网段。部署了tomcat使用了另一个网段,两个网段之间肯定是不能相互连通的,但是tomcat和mysql又需要相互连通,我们就要使用网络连通。原理图如下:
在没有使用connect命令的情况下,不同网络间的容器是无法进行网络连接的。
docker run -it --name tomcat1 tomcat
docker run -it --name tomcat2 tomcat
# 查看容器
docker ps -a
docker network create --driver bridge --subnet 10.22.1.0/24 --gateway 10.22.1.1 mynet
docker network ls
docker run -it --name tomcat-net-01 --net mynet tomcat
docker run -it --name tomcat-net-02 --net mynet tomcat
# 查看容器
docker ps -a
docker network connect [OPTIONS] NETWORK CONTAINER
docker network connect mynet tomcat1
tomcat1 ping tomcat-net-01可以ping通!
docker exec -it tomcat1 ping tomcat-net-01