Docker的网络可以分为 Bridge, Host, Overlay, None 和 Macvlan。其中,默认的类型为Bridge 类型。 下面来看看几个常见的命令和配置。
和虚拟机,宿主机的网络关系类似,容器的宿主上也可以有不同的网络。相同的网络上的容器可以互相通信。
例1
创建一个Bridge的网络,指定subnet和gateway
docker network create --subnet 10.1.0.0/24 --gateway 10.1.0.1 br02
创建以后查看一下,发现我们的宿主机上多了一个网络接口,刚好是我们的网关地址
查看一下这个网络的具体内容
例2
首先删除之前的网络,然后创建一个新的,这一次在例1的基础上还指定了 ip-range和 label
docker network prune
docker network create --subnet 10.1.0.0/16 --gateway 10.1.0.1 \
--ip-range=10.1.4.0/24 --driver=bridge --label=host4network br04
在我们的网络上创建一个新的容器
docker container run --name network-test01 -it --network br04 centos /bin/bash
然后安装网络工具
yum update -y
yum install -y net-tools
然后查看一下地址
查看一下网关
netstat -rn
查看一下DNS
cat /etc/resolv.conf
例3
分配一个指定的IP地址给容器
docker container run -d --name network-test02 --ip 10.1.4.102 --network br04 nginx
例4
在一个网络中连接2个容器
首先创建一个localhost的网络
docker network create -d bridge --internal localhost
然后创建一个新的Mysql容器在这个网络上
<br/>docker container run -d --name test_mysql \<br/>-e MYSQL_ROOT_PASSWORD=P4sSw0rd0 \<br/>--network localhost mysql:5.7<br/>
创建一个新的容器在Bridge 网络上
<br/>docker container run -it --name ping-mysql \<br/>--network bridge \<br/>centos<br/>
这个时候他没法ping 通的,因为他属于一个不同的网络
但是如果把他加入我们的localhost网络,就可以互相通信了
docker network connect localhost ping-mysql
如果查看一下,可以看见他的确属于两个网络了docker container inspect ping-mysql
例5
我们在我们的localhost网络里面创建一个nginx的容器
docker container run -d --name private-nginx -p 8081:80 --network localhost nginx
发现他从外部是无法访问的
但是可以从内部访问