docker容器埠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 -p 51006: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 -p 52005:80 -p 52006:8000 -p 52007:8888 debian02 /etc/rc.local
1.3 上述啟動引數解釋:
-h 是指啟動後容器中的主機名。
--name 是宿主機上容器的名稱,以後啟動停止容器不必用容器ID,用名稱即可,如docker stop redis-test。
-d 以後臺形式執行。
-p 指定對映埠,如果需要對映
debian02 是基礎映象名稱。
/etc/rc.local 是容器的啟動命令,把多個啟動指令碼放/etc/rc.local中,方便多個程式隨容器開機自啟動。
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 -p 10.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.local
3、埠對映動態擴容方案
在工作當中,一般增加新的服務時,就需新增一個埠對映,由於無法動態調整,通常都需要commit到新的映象,然後在基於新的映象來起容器,確實是一件很麻煩的事。
但對映的本質,是通過iptables來完成的。所以我們可以動態的用iptables增加埠對映即可,如下:
3.1 用iptables檢視容器對映情況:
root@qssec-iframe:~# iptables -t nat -nvL
…
Chain DOCKER (2 references)
pktsbytes target prot opt in out source destination
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 to:172.17.0.3:8000
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:172.17.0.3:443
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:172.17.0.3:3306
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6379 to:172.17.0.3:6379
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6381 to:172.17.0.3:6381
3470 190K DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.3:80
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 to:172.17.0.3:8888
41 2336 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp 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-destination 172.17.0.3:10050
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10051 -j DNAT --to-destination 172.17.0.3:10051
3.2.2 單IP多容器埠擴容:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50010 -j DNAT --to-destination 172.17.0.3:10050
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50011 -j DNAT --to-destination 172.17.0.3:10051
#另一個容器則可以規劃為60010,60011,這樣在zabbix監控的時候,就需要指定客戶容器的埠連線了。
3.2.3 多IP多容器埠擴容:
iptables -t nat -A PREROUTING -d 10.18.103.2 -p tcp -m tcp --dport 10050 -j DNAT --to-destination 172.17.0.3:10050
iptables -t nat -A PREROUTING -d 10.18.103.2 -p tcp -m tcp --dport 10051 -j DNAT --to-destination 172.17.0.3:10051
#iptables -t nat -A PREROUTING -d 10.18.103.3 -p tcp -m tcp --dport 10050 -j DNAT --to-destination 172.17.0.4:10050
#iptables -t nat -A PREROUTING -d 10.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的安裝、初步使用、命令詳解、映象製作、容器遷入遷出等,點選參考我另一篇文章:
如有疑問可加我QQ:10286460 ,共同討論,共同進步。
本文出自 “楊雲” 部落格,轉載請與作者聯絡!
相關推薦
docker容器埠IP規劃及埠動態擴容
docker容器一旦啟動,引數就無法改變,生產環境中最常變的就是埠對映,為了解決這個問題,那麼首先就要規劃好,本文列出了兩種埠規劃方案,如果後續維護中出現了要增加埠對映的場景,本文也給出了動態埠對映擴容方案。 1、單IP多容器對映規劃方案 此種環境適用只有單個IP環境下,如雲主機等。
Socket獲取客戶端IP地址及埠號
Socket類包含一些非常有用的屬性,這些屬性允許確定關於正在連線的客戶端的資訊。其中關鍵資訊之一是返回EndPoint物件的RemoteEndPoint屬性。EndPoint類本身是抽象的,要想收集有用的資訊,需·要把EndPoint強制型別轉換為IPEndPoint物
Docker容器檢視ip地址
一直以為Docker是沒有IP地址的,其實Docker的網路模板有點類似我們平常使用虛擬機器的host-only模式,容器和宿主機組成一個獨立的區域網,宿主機的IP為172.17.0.1,對應主機的網路名稱為docker0 所以要想看到docker容器的i
docker容器的時區(timezone)及mvn啟動應用程式的時區(timezone)設定
設定docker容器的系統時間 在宿主機器上開闢docker容器, ssh [hostName]@[Ip] -p [post],進入docker,執行date/date -R,看到docker系
Docker容器的簡單操作及應用部署
1.什麼是虛擬化 虛擬化(Virtualization)是一種資源管理技術 ,虛擬化技術種類很多,例如:軟體虛擬化、硬體虛擬化、記憶體虛擬化、網路虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機器等等 。 2.什麼是Docker Docke
Docker ,Keepalived , 虛擬IP ,NAT,如何把Docker容器裡的虛擬 IP和 埠對映到區域網
機器1 機器2 192.168.1.100 IP1 :192.168.1.103 IP2:172.17.0.1 (Docker bride
修改docker容器的埠對映
大家都知道docker run可以指定埠對映,但是容器一旦生成,就沒有一個命令可以直接修改。通常間接的辦法是,儲存映象,再建立一個新的容器,在建立時指定新的埠對映。 有沒有辦法不儲存映象而直接修改已有的這個容器呢?有。在stackoverflow上面找到答案了。 方法一
對執行中的Docker容器進行埠對映
問題:如何對執行中的Docker容器進行埠對映? 解決方案如下: iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT} -j DNAT --to-destination ${CONTAINERIP}:${YOUR
對執行中的Docker容器新增埠對映
問題:如何對執行中的Docker容器新增埠對映? 解決方案如下: iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT} -j DNAT --to-destination ${CONTAINERIP}:${YOUR
Docker容器內部埠對映到外部宿主機埠的方法小結
轉自:https://www.cnblogs.com/kevingrace/p/9453987.html Docker允許通過外部訪問容器或者容器之間互聯的方式來提供網路服務。容器啟動之後,容器中可以執行一些網路應用,通過-p或-P引數來指定埠對映。 注意:宿主機的一個埠只能對映到容器內部
解決Windows下無法對docker容器進行埠對映的問題
解決Windows下無法對docker容器進行埠對映的問題 在安裝了一個Windows下安裝了docker,並嘗試在其中執行Nginx服務,但對映完畢之後,在主機的瀏覽器中,開啟localhost:port無法訪問對應的服務。 原因:docker是執行在Linux上的,在Windows中執行
Docker每次啟動容器,IP及hosts指定
前言 每次在使用Docker啟動Hadoop叢集的時候,都需要重新繫結下網絡卡,固定IP,同時修改/etc/hosts檔案,非常麻煩,於是想探尋下原因及優化。 一、原因 /etc/hosts, /etc/resolv.conf和/etc/hostname,容器中
docker容器埠影射宿主機埠
#將容器的8080埠對映宿主機埠8080 –name:給容器起的名稱 docker run -d -p 8080:8080 --name=“tomcat7” -id 1130e687fa3c /bin/bash
docker容器埠無法訪問的一個原因
本文主要是針對對docker部署不太熟悉的朋友,把本人碰到的一些坑坑窪窪再次總結一下,前面已經寫過的,這裡就不再贅述了,避免重複發文的嫌棄。 上文提到了docker部署宿主機埠的問題,今天也解決了。首先容器的埠可以對映到宿主機的多個埠,例如容器內部的埠是8080,可以對映到宿主機8080或者
docker容器埠對映,容器間關聯,倉庫搭建(不加密,加密,加密認證)
一,容器埠對映: [root@foundation92 Desktop]# docker run -d --name web -p 8080:80 nginx #將本機的8080埠對映到容器的80埠 [root@foundation92 Desktop
通過配置檔案修改docker容器埠對映
有時候,我們需要給正在執行的容器新增埠對映,百度一下發現很多都是通過iptables,或者是通過將當前容器通過docker commit命令提交為一個映象,然後重新執行docker run命令新增埠對映。這種方法雖然可以,但是感覺好像有點南轅北轍,沒有必要啊。看了很多文章,貌
關於修改Oracle伺服器IP及埠時要注意的問題
關於修改 Oracle 伺服器 IP 及埠時要注意的問題 (原創: flexitime ,轉載請註明出處,謝謝) 一個安裝好的 Oracle 伺服器,如果修改伺服器的 IP 地址或埠號,可能會使得這個伺服器無法再連線上。所以安裝時要注意一下以下問題。 1. 安裝 O
啟動docker容器時虛擬機器埠轉發外部無法訪問
centos 7 docker 啟動了一個web服務 但是啟動時 報 WARNING: IPv4 forwarding is disabled. Networking will not work. 解決辦法: # vi /etc/sysctl.conf 或者 # vi /u
Windows下無法對docker容器進行埠對映的問題
轉自:https://www.wangminli.com/?p=1179 docker是執行在Linux上的,在Windows中執行docker,實際上還是在Windows下先安裝了一個Linux環境,然後在這個系統中執行的docker。也就是
Docker容器埠配置
1. 自動對映 # docker run -d -p 80 --name myweb 1311399350/myweb nginx -g "daemon off;" 上面的-p 80,將在docker主機上隨機開啟一個埠(可利用docker port命令