端口映射
端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。端口映射有动态和静态之分。
通俗来讲,端口映射是将一台主机的内网(LAN)IP地址映射成一个公网(WAN)IP地址,当用户访问提供映射端口主机的某个端口时,服务器将请求转移到本地局域网内部提供这种特定服务的主机;利用端口映射功能还可以将一台外网IP地址机器的多个端口映射到内网不同机器上的不同端口。
端口映射功能还可以完成一些特定代理功能,比如代理POP,SMTP,TELNET等协议。理论上可以提供65535(总端口数)-1024(保留端口数)=64511个端口的映射。举例说明如何设置端口映射:例如要映射一台IP地址为192.168.111.10的WEB服务器,只需把服务器的IP地址192.168.111.10和提供web服务的TCP端口80填入到路由器的端口映射表中即可。
删除原来的容器(如果没有可以不执行此操作):
[root@foundation17 docker]# docker rm -f `docker ps -aq`
dbcc3fcddec4
15a3d7940850
f0d0da9c1379
eb3e9ed8d905
fb81fe9d9f40
建立端口映射:
对于宿主机来说nginx使用8080端口,映射到容器端的80端口:
[root@foundation17 docker]# docker run -d --name vm1 -p 8080:80 nginx
5cc176f915726422f394109f118d0a25eb15956f7f94295762448230a5cd6948
端口映射查看:
[root@foundation17 docker]# iptables -t nat -nL
可以看到策略,当访问宿主机8080端口时,转接到172.17.0.2端(容器端)的80端口。8080端口是对外端口,容器80端口对外透明。将首页文件复制到nginx默认发布目录,就可以在访问宿主机端8080端口时候转接到容器端的80端口也就是nginx服务。
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:80
容器互联
容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式。
该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。
用ubuntu镜像生成一个新的容器vm2,并和刚才容器vm1互联,互联之后容器相互之间可以ping通:
[root@foundation17 docker]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@b98b939b77d3:/# ping nginx
PING nginx (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx (172.17.0.2): icmp_seq=1 ttl=64 time=0.088 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.095 ms