容器内的应用可以通过配置容器网络,从而和外部网络互通。
容器网络分类
docker容器的网络有三种:
1. host
2. bridge
3. none
有容器运行的时候,我们可以通过如下命令来查看容器可以使用的网络:
docker network ls
**
默认情况下可以查看到红圈中圈出来的网络,图中maintain的网络是我创建的网桥。
创建新的网桥使用如下命令:
docker network create NetworkName
host网络优缺点:
连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。容器可以通过配置使用主机已有的网络来进行通信,我把使用host网络的优缺点总结了一下:
优点:
- 相对于使用虚拟网桥的网络来说,具有更高的性能。
- 可以方便的通过配置主机的host网络来控制网络访问。
缺点:
- 不灵活,使用host网路的时候,主机已经使用的端口容器网络不能再使用。
host网络的使用方法:
host网络的使用办法:
在运行一个容器的时候指定–network的参数为host就可以让启动的容器使用host网络。如下:
查看host网络的信息:
当使用host网路的时候,容器不会有自己的IP地址。
bridge网络:
Docker 安装时会创建一个命名为 docker0 的 linux bridge。如果不指定–network,创建的容器默认都会挂到 docker0 的网络上。当我们使用默认的网络配置来创建容器的时候,会在docker0上挂一个虚拟的网络接口。新创建的容器会被自动分配一个特定网段的IP地址。
为了使用更加灵活,用户可以创建自己的bridge网络来提供给容器使用。
创建bridge网桥的方法如下:
docker network create NetworkName
另外可以通过指定网段来创建一个有特定网段的bridge
如下,创建了一个网段为192.168.50.0/24 网关为192.168.50.254 名字为201825AA的网桥设备。
使用方式:
在创建容器的时候指定容器的–network选项即可使用让容器使用该网络。创建方式如下:
此时使用docker inspect 查看容器的信息,发现容器的网络已经自动获取到了2018AA这个网络设备刚才规定的网段中的一个地址:
none网络:
none网络就是指该容器不使用任何网络,一半会在运行完全不需要网络的应用的时候会用到这样的网络配置。例如需要用容器运行专门在本地计算文件hash值的应用,用来产生随机密码的应用。
这样的容器在创建的时候需要指定使用none的网络。创建方式和前面两种网络的指定方式一样,都是指定–network的参数。
**