1. 云栖社区>
  2. PHP教程>
  3. 正文

docker容器端口IP规划及端口动态扩容

作者:用户 来源:互联网 时间:2017-12-01 20:36:54

docker容器规划端口动态扩容

docker容器端口IP规划及端口动态扩容 - 摘要: 本文讲的是docker容器端口IP规划及端口动态扩容, docker容器一旦启动,参数就无法改变,生产环境中最常变的就是端口映射,为了解决这个问题,那么首先就要规划好,本文列出了两种端口规划方案,如果后续维护中出现了要增加端口映射的场景,本文也给出了动态端口映射扩容方案。 1、单IP多容器映射

docker容器一旦启动,参数就无法改变,生产环境中最常变的就是端口映射,为了解决这个问题,那么首先就要规划好,本文列出了两种端口规划方案,如果后续维护中出现了要增加端口映射的场景,本文也给出了动态端口映射扩容方案。 1、单IP多容器映射规划方案此种环境适用只有单个IP环境下,如云主机等。 1.1 端口映射规划表格: 规划不同的端口段,映射到容器从而对外提供服务。



主机名称

ssh映射


mysql映射


nginx映射


redis映射




redis-test


51000


22


51001


3306


51004


80


51002


6379




51005


8000


51003


6381




51006


8888



scheduler-test


52000


22


52001


3306


52004


80


52002


6379




52005


8888


52003


6381




52006


8000













1.2 对应容器启动命令: docker run -h="redis-test"--name redis-test -d -p 51000:22 -p 51001:3306 -p 51003:6379 -p 51004:6381-p 51005:80 -p51006:8000 -p 51007:8888 debian02 /etc/rc.local docker run -h="salt_zabbix_manager02"--name salt_zabbix_manager02 -d -p 52000:22 -p 52001:3306 -p 52003:6379 -p 52004:6381-p52005:80 -p 52006:8000 -p 52007:8888debian02 /etc/rc.local1.3 上述启动参数解释:


-h是指启动后容器中的主机名。


--name 是宿主机上容器的名称,以后启动停止容器不必用容器ID,用名称即可,如docker stop redis-test。


-d 以后台形式运行。


-p 指定映射端口,如果需要映射UDP端口,则格式是 -p3000:3000/udp。


debian02是基础镜像名称。


/etc/rc.local是容器的启动命令,把多个启动脚本放/etc/rc.local中,方便多个程序随容器开机自启动。


#关于docker的安装、初步使用、命令详解、镜像制作、容器迁入迁出等,请参考我另一篇文章:http://www.iyunv.com/forum.php?m ... &extra=page%3D1


2、多IP多容器映射规划方案此规划比较适用于内网测试研发环境,所有对外访问IP都需要配置在宿主机上,如以第二IP eth0:1,eth0:2这种形式配置,然后每个IP和容器的端口映射配置就可以一致了。2.1 端口与IP映射规划表格: (此处是内网IP,宿主机IP是10.28.103.1)



主机名称

对外访问IP


容器开放端口


操作系统




iframe-test


10.18.103.2


22 3306 80 8000 8888 443 6379 6381


debian7




web-test


10.18.103.3


22 3306 80 8000 8888 443 6379 6381


debian7



2.2 对应容器启动命令: docker run -h="iframe-test"--name iframe-test -d -p 10.18.103.2:22:22 -p10.18.103.2:3306:3306 -p 10.18.103.2:6379:6379 -p 10.18.103.2:6381:6381-p 10.18.103.2:80:80 -p 10.18.103.2:8000:8000 -p 10.18.103.2:8888:8888 -p 10.18.103.2:443:443 debian-iframe-test /etc/rc.local docker run -h="web-test"--name web-test -d -p 10.18.103.3:22:22 -p 10.18.103.3:3306:3306-p 10.18.103.3:6379:6379 -p 10.18.103.3:6381:6381-p 10.18.103.3:80:80 -p 10.18.103.3:8000:8000-p 10.18.103.3:8888:8888 -p 10.18.103.3:443:443 debian-iframe-test /etc/rc.local3、端口映射动态扩容方案在工作当中,一般增加新的服务时,就需新增一个端口映射,由于无法动态调整,通常都需要commit到新的镜像,然后在基于新的镜像来起容器,确实是一件很麻烦的事。 但映射的本质,是通过iptables来完成的。所以我们可以动态的用iptables增加端口映射即可,如下:3.1 用iptables查看容器映射情况: [email protected]:~# iptables -t nat -nvL … Chain DOCKER (2 references) pktsbytes target prot opt in outsource destination 0 0 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:8000 to:172.17.0.3:8000 0 0 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:443 to:172.17.0.3:443 0 0 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:3306 to:172.17.0.3:3306 0 0 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:6379 to:172.17.0.3:6379 0 0 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:6381 to:172.17.0.3:6381 3470190K DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:80 to:172.17.0.3:80 0 0 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:8888 to:172.17.0.3:8888412336 DNAT tcp --!docker0 * 0.0.0.0/00.0.0.0/0tcp dpt:50000 to:172.17.0.3:22 #从这里可以找到docker容器里使用的IP,然后在用iptables增加映射即可。3.2 举例新增zabbix端口的映射: 3.2.1单IP单容器端口扩容: iptables -t nat -A PREROUTING-p tcp -m tcp --dport 10050 -j DNAT --to-destination172.17.0.3:10050 iptables -t nat -A PREROUTING-p tcp -m tcp --dport 10051 -j DNAT --to-destination172.17.0.3:100513.2.2单IP多容器端口扩容: iptables -t nat -A PREROUTING-p tcp -m tcp --dport 50010 -j DNAT --to-destination172.17.0.3:10050 iptables -t nat -A PREROUTING-p tcp -m tcp --dport 50011 -j DNAT --to-destination172.17.0.3:10051 #另一个容器则可以规划为60010,60011,这样在zabbix监控的时候,就需要指定客户容器的端口连接了。3.2.3多IP多容器端口扩容: iptables -t nat -A PREROUTING -d10.18.103.2 -p tcp -m tcp --dport 10050 -j DNAT --to-destination 172.17.0.3:10050 iptables -t nat -A PREROUTING -d10.18.103.2 -p tcp -m tcp --dport 10051 -j DNAT --to-destination 172.17.0.3:10051 #iptables -t nat -A PREROUTING -d10.18.103.3 -p tcp -m tcp --dport 10050 -j DNAT --to-destination 172.17.0.4:10050 #iptables -t nat -A PREROUTING -d10.18.103.3 -p tcp -m tcp --dport 10051 -j DNAT --to-destination 172.17.0.4:10051 #这样zabbix连接10.18.103.2,3的正常zabbix端口就可以了。



以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索docker , 容器 , 规划 , 端口 , 动态 扩容 ,以便于您获取更多的相关知识。