Docker的网络是非常重要和复杂的一块,这一小节我们将专门学习这一块内容。
在我们安装好Docker之后,默认会创建3个网络。可以通过命令docker network ls进行查看。

网络类型
bridge
如果未对容器的网络类型进行定义,默认将连接到此网络。它会为容器分配一个子网IP,通常是以172.17.0.x的形式。具体IP我们可以通过之前提到的docker inspect命令进行查看,以前面的web2容器为例:

看到“Networks”属性,“bridge”为网络名,“Gateway”显示网关为“172.117.0.1”,“IPAddress”显示容器的IP地址为“172.17.0.5”。同一个网络下的容器可以通过此IP地址进行访问。“Ports”属性显示容器的80端口被映射到主机上的81端口,主机可以通过81端口访问此容器。
host
此网络类型代表容器共享主机网络,(Linux下使用主机IP,Windows下创建一个虚拟IP,只有主机能访问),直接占用主机端口,不再需要-p参数来指定端口。
这种方式的好处就是不再需要配置映射端口,但是容器和主机之间的网络隔离性消失,所以生产环境并不建议使用此网络配置。
none
当容器属于此网络类型时不会分配IP地址,其它容器和主机都无法通过网络访问它,在网络上它是完全与外界隔离的。
自定义bridge
思考一下这个场景,一个基础的web应用,包括前端、后端、数据库3个容器。前端需要向后端发送请求,后端需要访问数据库。如果使用默认的bridge网络,那么和其它容器无法进行网络隔离。这时比较好的方式是自定义一个bridge网络,给这3个容器使用,一方面这3个容器在一个网络中,可以互相访问,同时也可以通过映射端口的方式让主机访问它们。下面我们来看看具体操作。
网络命令
创建网络
如果要将容器划分到一个网络中,必须先创建网络(有一种情况不需要创建,后面的小节会提到),命令如下:
docker network create <网络名称>
命令执行成功后会返回一个网络id,我们可以用下面的命令查看。
查看网络
查看网络列表的命令前面已经提到过docker network ls,往往我们可能还需要查看网络的详细信息,就需要下面这条命令了。
docker network inspect <网络id或名称>
通过这条命令可以查看到该网络网管,所连接的容器等重要信息。
删除网络
当容器被删除之后,给它配置的网络并不会随之删除,需要手动执行命令。
docker network rm <网络id或名称>
我们也可以通过下一条命令来清除未被容器使用的网络,当然默认的3个网络不会被清除。
docker network prune
本书地址https://yalishizhude.gitbooks.io/docker-book/)
更多web技术内容请关注公众号“web学习社”
