Docker 網(wǎng)絡(luò)-發(fā)布端口(外部主機(jī)訪問容器內(nèi)部提供的服務(wù)斟冕,容器之間互相訪問提供的服務(wù))

基于 Docker18.09.0


1. 容器之間彼此自動發(fā)布端口

假如兩個容器是在一個網(wǎng)絡(luò)中的話逃顶,一個容器的端口是會自動暴露給其他容器的。

比如下面的實例是運(yùn)行了一個 nginx 的容器育谬,之后再運(yùn)行一個客戶端容器
,再客戶端的容器中訪問其 80 端口帮哈。

$ docker run -itd --rm --name=nginx1 nginx:alpine

查看 nginx 的地址
部分內(nèi)容已截斷

$ docker network inspect bridge
{
        "Name": "bridge",
"Containers": {
            "5b9d71bc95fbae83eac03c0165ae871cc387caa1b8b35c4640a90f79524e8e73": {
                "Name": "nginx1",
                "EndpointID": "6192b427066ac0d269e209d0435b5832fdca58241f5ccdb97d3d166fae42fbdb",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },

運(yùn)行另一個容器膛檀,并安裝 curl 軟件包,訪問 nginx 提供的 web服務(wù)

$ docker run -it --rm --name=myurl alpine /bin/sh
/ # apk add curl
/ # curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

...略...

由于兩個容器是連接到默認(rèn)網(wǎng)絡(luò),所以需要使用容器 IP 進(jìn)行通信咖刃。
假如是使用的自定義網(wǎng)絡(luò)泳炉,就可以直接使用容器名進(jìn)行通信了。

可以看到上面的情況只能通過彼此的端口訪問彼此提供的服務(wù)嚎杨,顯然這很不方便胡桃。
因為通常情況下我們都不能很方便的指的容器的 IP, 所以我們在創(chuàng)建一套完整的應(yīng)用程序的時候,都是把他們放在一個自定義的網(wǎng)絡(luò)中的磕潮。這樣就可以通過容器名來訪問這個容器提供的服務(wù)了。
比如下面的示例就是在一個自定義的網(wǎng)絡(luò)nginx-to-redis中運(yùn)行了一個 nginx 和 一個 redis容贝。

$ docker network create nginx-to-redis
0966519c68e2c1002194e6567d00a2af4601180b054b4d43fa05d58b3af3e231

$ docker run -itd --rm --name=nginx --network=nginx-to-redis nginx:alpine
4631cd452bba70e5d0227e8d1c33337ef2427036495ebb3e44faaa3e1a5cd4f3

$ docker run -itd --rm --name=redis --network=nginx-to-redis redis
e3e6d83c11c252cb824eb50b92156dafdc0bf6ba499a2ecb550193f7d11f7c7c

接下來自脯,進(jìn)入到 nginx 容器中,安裝 python3 以及 連接 redis 的模塊斤富,訪問 redis6379 端口膏潮,并進(jìn)行一些簡單操作。

$ docker exec -it nginx /bin/sh
/ # apk add python3
...略...
/ # pip3 install redis
...略...

/ # python3
Python 3.6.6 (default, Aug 24 2018, 05:04:18)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> rs = redis.Redis(host='redis', port=6379)
>>> rs.set("name", 'shark')
True
>>> rs.get("name")
b'shark'
>>> exit()
/ # exit

請允許我無恥的插播一條廣告_, 這里有一整套完整的 Python3 基礎(chǔ)教程满力,圖文并茂焕参。點我傳送門:Python3 完整基礎(chǔ)教程

同時歡迎購買我的基礎(chǔ)全套視頻微我 y86000153優(yōu)惠100 點我

2. 發(fā)布一部分容器的服務(wù)端口給外部使用

容器中可以運(yùn)行一些應(yīng)用,要讓外部也可以訪問這些應(yīng)用油额,可以通過 -P-p 參數(shù)來指定端口映射叠纷。

當(dāng)使用大寫的 -P 標(biāo)記時,Docker 會隨機(jī)映射一個物理機(jī)的 49000~49900 之間的端口到內(nèi)部容器開放的網(wǎng)絡(luò)端口潦嘶。

-p 則可以指定想要映射的物理機(jī)端口涩嚣,并且,在一個指定端口上只可以綁定一個容器掂僵。

示例:

a. 映射指定的本地 IP 和端口到容器端口

ip:hostPort:containerPort

$  docker run -d -p 10.18.42.174:8080:80 --name mynginx2 nginx:alpine

b.映射本地指定 IP 的任意端口到容器的一個端口航厚,本地主機(jī)會自動分配一個端口

ip::containerPort

$ docker run -d -p 10.18.42.174::80 --name mynginx3 nginx:latest

c. 映射本機(jī)的所有的地址的指定端口到容器的指定端口

hostPort:containerPort

[root@docker ~]# docker run -d -p 8000:80  nginx:latest

-p 標(biāo)記還可以多次使用來綁定多個端口

例如:

$ docker run -d \
    --name nginx110
    -p 4430:443 \
    -p 8000:80 \
    nginx:alpine

查看端口映射配置信息

使用 docker port 來查看當(dāng)前映射的端口配置,也可以查看到綁定的地址

格式:

docker port 容器名/容器 ID 容器的端口號

$ docker port nginx110
4430/tcp -> 0.0.0.0:443
80/tcp -> 0.0.0.0:8000
$ docker port nginx110 80
0.0.0.0:8000
$ docker port nginx110 443
0.0.0.0:4430
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锰蓬,一起剝皮案震驚了整個濱河市幔睬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芹扭,老刑警劉巖麻顶,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冯勉,居然都是意外死亡澈蚌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門灼狰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宛瞄,“玉大人,你說我怎么就攤上這事》莺梗” “怎么了盈电?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杯活。 經(jīng)常有香客問我匆帚,道長,這世上最難降的妖魔是什么旁钧? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任吸重,我火速辦了婚禮,結(jié)果婚禮上歪今,老公的妹妹穿的比我還像新娘嚎幸。我一直安慰自己,他們只是感情好寄猩,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布嫉晶。 她就那樣靜靜地躺著,像睡著了一般田篇。 火紅的嫁衣襯著肌膚如雪替废。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天泊柬,我揣著相機(jī)與錄音椎镣,去河邊找鬼。 笑死彬呻,一個胖子當(dāng)著我的面吹牛衣陶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闸氮,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼剪况,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒲跨?” 一聲冷哼從身側(cè)響起译断,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎或悲,沒想到半個月后孙咪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡巡语,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年翎蹈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片男公。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡荤堪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澄阳,我是刑警寧澤拥知,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站碎赢,受9級特大地震影響低剔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肮塞,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一襟齿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枕赵,春花似錦蕊唐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钓试。三九已至装黑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弓熏,已是汗流浹背恋谭。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挽鞠,地道東北人疚颊。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像信认,于是被迫代替她去往敵國和親材义。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容