安装完docker后会自动创建网络,我们可以通过以下命令查看存在的网络模式:
docker network ls
创建容器时,可以使用 --network
选项指定容器的网络模式。
当 Docker 启动时,会自动在主机上创建一个名为 docker0 的虚拟网桥,主机上启动的 Docker 容器会连接到这个虚拟网桥上。同时Docker会随机分配一个本地未占用的私有网段中的一个地址给docker0接口。此后启动的容器内的网口也会自动分配一个同一网段的地址。
当创建一个 Docker 容器的时候,同时会创建了一对 veth pair
接口。这对接口一端在容器内,即 eth0
;另一端在本地并被挂载到 docker0
网桥,名称以 veth
开头。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
注:当我们自己创建网络的时候默认即是bridge模式。
docker network create [OPTIONS] NETWORK
Options:
false
,启用手动容器安装bridge
,驱动程序管理网络false
,限制对网络的外部访问--subnet
参数示例:
$ docker network create -d bridge my-bridge2
49f6474bbab3fa86848fc1270589221c8e1b10d62917e2e6ff8485b41465293c
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
d651f64b431e bridge bridge local
9ea6532107f7 host host local
49f6474bbab3 my-bridge bridge local
621f2f431b5d my-bridge2 bridge local
cd8be57c82ab none null local
docker network rm NETWORK [NETWORK...]
示例:
$ docker network rm my-bridge2
my-bridge2
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
d651f64b431e bridge bridge local
9ea6532107f7 host host local
49f6474bbab3 my-bridge bridge local
cd8be57c82ab none null local
docker network inspect [OPTIONS] NETWORK [NETWORK...]
Options:
示例:
$ docker network inspect -f ‘{{json .IPAM.Config}}‘ bridge
[{"Subnet":"172.17.0.0/16","Gateway":"172.17.0.1"}]
为新建的容器指定my-bridge网络:
docker run --network my-bridge -dit --name mycentos1 centos bash
再启动一个容器加入到my-bridge网络:
docker run --network my-bridge -dit --name mycentos2 centos bash
进入mycentos1容器查看是否和mycentos2网络互通:
$ docker exec -it 62c3a18331e5 bash
[root@62c3a18331e5 /]# ping mycentos2
PING mycentos2 (172.21.0.3) 56(84) bytes of data.
64 bytes from mycentos2.my-bridge (172.21.0.3): icmp_seq=1 ttl=64 time=0.141 ms
64 bytes from mycentos2.my-bridge (172.21.0.3): icmp_seq=2 ttl=64 time=0.113 ms
64 bytes from mycentos2.my-bridge (172.21.0.3): icmp_seq=3 ttl=64 time=0.124 ms
可以将指定的容器与指定的网络进行连接或者断开。
连接:
docker network connect [OPTIONS] NETWORK CONTAINER
Options:
示例:
$ docker network connect my-bridge mycentos3
断开:
docker network disconnect [OPTIONS] NETWORK CONTAINER
Options:
示例:
$ docker network disconnect bridge mycentos3
如果启动容器的时候使用host
模式,那么这个容器将不会获得一个独立的Network Namespace
,而是和宿主机共用一个 Network Namespace
。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。
docker run --network host -dit redis
使用none
模式,docker 容器拥有自己独立的 Network Namespace
,但并没有进行任何网络配置。即这个 docker 容器没有网卡、IP、路由等信息。需要我们自己为 docker 容器添加网卡、配置 IP 等。
该模式适合需要高度定制网络的用户使用。
原文:https://www.cnblogs.com/bubbleboom/p/15127654.html