首頁  >  文章  >  運維  >  docker中expose是啥意思

docker中expose是啥意思

WBOY
WBOY原創
2022-07-25 16:12:264565瀏覽

在docker中,expose是標記資訊的意思,是一種文檔表述方式;expose能夠在dockerfile中讓開發者可以更快讀懂Image開放了哪些服務,不能直接打開端口,方便運維人員在使用容器時,知道要打開哪些端口,如果沒有expose端口, Container之間服務也是可以互相訪問的。

docker中expose是啥意思

本教學操作環境:linux7.3系統、docker19.03版、Dell G3電腦。

docker中expose是啥意思

Dockerfile 裡面的expose,是標記信息,不能直接打開端口,方便運維人員在使用容器時,知道要打開哪些連接埠。使用時 docker run -itd -P xxx:xxx ,大寫 -P,會映射在Dockerfile檔案中使用EXPOSE定義的端口,不需要手動 -p : 這種形式。

EXPOSE只是一種文件表述方式,在dockerfile中讓開發者可以更快讀懂Image開放了哪些服務,沒有實際作用意義。如果沒有EXPOSE連接埠, Container之間服務也是可以互相存取的。

Docker裡面expose和publish(run -p)的區別

這裡主要記錄的是我最近使用docker發現的一個小小的疑惑。總結起來就是:

docker裡,命令列啟動時候docker run -p暴露介面和dockerfile裡expose一個介面之間有什麼差別與連結。

具體的描述如下:

例如我先在Dockerfile裡Expose一個8080的連接埠

EXPOSE 8080

然後我build這個image以備後期使用

docker build -t myimage - Dockerfile

接下來就是使用docker run啟動這個image的一個container實例,並且publish一個連接埠

docker container run -d -p 8080 myimage

這裡就出現了一個我所說的一個疑問,既然我已經在Dockerfile裡聲明了Expose埠8080,為什麼,我還需要publish這個埠(-p)呢。這兩者有什麼區別和聯繫,我是否能夠直接

docker container run -d myimage

呢,這種情況下,是否還有端口暴露出來呢?

經過測試,(測試過程被省略,有興趣的朋友可以自行去測試下,其實這兩者之間是有著本質的區別的,同時也有著一定程度的關聯

#我這邊列出這四種組合

A, 既沒有在Dockerfile裡Expose,也沒有run -p

B, 只在Dockerfile裡Expose了這個連接埠

C,同時在Dockerfile裡Expose,又run -p

D, 只有run -p

1------針對情況A,啟動在這個container裡的服務既不能被host主機和外網訪問,也不能被link的container訪問,只能在此容器內部使用

2--------針對情況B,啟動在這個container裡的服務不能被docker外部世界(host和其他主機)訪問,但是可以透過container

link,被其他link的container訪問到

3--------針對情況C,啟動的這個cotnainer既可以被docker外部世界訪問,也可以被link的container訪問

#4---------針對情況D,其實docker做了特殊的隱式轉換,等價於情況C,既可以被外部世界訪問,也可以被link的container訪問到(真對這種情況,原因是docker認為,既然你都要把port

#open到外部世界了,等價於其他的container肯定也能訪問,所以docker做了自動的Expose

#推薦學習:《docker視頻教程

以上是docker中expose是啥意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn