大家都尝到了 Docker 的优点,我们的服务部署到容器 Container 里之后,下一步就是需要给用户开放服务端口了
那么如何将容器 Container 里的软件服务的端口影视到宿主机来呢?下面就跟着本文学习一下吧
所谓自动映射就是在启动一个容器的时候告诉容器我们需要将容器内的哪些端口映射到外面去,这样做的好处是每次重新 docker 服务,亦或者重新服务器,在容器启动的一瞬间这些端口就会自动映射出去了
通过启动容器的 -p 参数进行自动映射实现,参数格式为:
映射宿主机所有设备 - [宿主端口]:[容器端口]
映射宿主机特定设备 - [IP地址]:[宿主端口]:[容器端口]
映射宿主机随机端口 - [IP地址]::[容器端口]
虽然这种自动映射的方法很简单,但是有个大问题,就是端口是直接开放给任何人的,我们无法控制哪些 IP 地址可以访问我们的服务端口
手动映射就是在 docker 服务启动之后,自己通过 iptables 命令设置一系列规则进行端口映射,这样做的好处相比自动映射来说最明显的莫过于可以自由定义规则参数,我们想把端口开放给谁就开放给谁,而且可以随时切断端口访问权限
我们通过 DOCKER 这个链建立了一个宿主的 80 端口到容器 10.16.1.66 的 80 端口的映射
建立完容器端口到宿主端口的映射之后,我们就可以通过转发规则将映射到宿主的端口转发出去了
如果我们只希望某个 IP 地址可以访问容器端口,可以在转发规则里面限制来源 IP 地址
新版本下我们可以通过一条规则就可以完成容器到终端的数据表转发了
我们直接设置 DOCKER 规则即可完成这个设定
我们需要在设置 DOCKER 规则时候增加来源 IP 地址的限制
目前笔者还没有找到一个方法可以去判断当前版本是新版本,还是旧版本
好在无论是新版本还是旧版本,多一个 FORWARD 规则也不会影响映射目的,索性我们就统一都先设置一个 DOCKER,再设置一个 FORWARD 规则好了
如果我们确定要将某个容器的服务端口开放给任何人,直接用容器的 -p 参数进行自动映射是最方便的
但是如果需要控制容器的服务端口的访问权限范围 ,只能采用手动映射的方式才能实现