Docker技术之容器与外部相连

说明,在本文中,所有的images采用的是busybox:latest。系统采用的是Ubuntu22.04.
容器与外部相连说的是容器网络以外的网络,可以是任何业务网络或者其他自建的网络,通常情况下是指互联网。

一、容器访问外部网络

前面文章知道容器通过网桥(默认docker0或者自建的网桥)就可以进行外部世界的访问,因此容器建立之后就能访问外部网络,请看实例:

docker 外网ping 容器 docker容器内部与外网通信_容器


从上图中可以看到,容器建立之后就能直接通联互联网。再次以自建网桥建立容器进行通信如下:

docker 外网ping 容器 docker容器内部与外网通信_容器_02


可以看出不论是自建网桥还是系统默认的网桥,容器都可以与互联网相连。其内部实质是NAT原理,跟路由器一样,路由器本身只有一个公网IP地址,但是通过NAT之后可以连接多个设备进行互联网的访问。

二、外部网络访问容器

容器访问外部网络是天生具有的,那么外部网络如何访问容器呢?可以通过端口映射的方式进行访问,docker可将容器对外提供服务的端口映射到host的某个端口,外网通过该端口访问容器。在本例中采用笔者构建的apache_ubuntu镜像来进行演示,在这个镜像中提供了web服务,下面我们进行演示:

docker 外网ping 容器 docker容器内部与外网通信_docker 外网ping 容器_03

上图展示了建立容器的过程,容器的80端口映射到本机的80端口,每一个映射的端口,host都会启动一个docker-proxy进程来处理访问容器的流量,然后可以在本地主机上面进行访问。

docker 外网ping 容器 docker容器内部与外网通信_docker_04

我们通过本地docker host的地址进行访问就直接访问到了容器的web服务。