雲計算核心技術Docker教程:Dockerfile文件EXPOSE命令詳解

2020-12-25 TechWeb

Dockerfile文件EXPOSE 指令是聲明運行時容器提供服務埠,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個埠的服務。


語法格式

EXPOSE 埠1 [埠2...]

在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護埠,以方便配置映射;另一個用處則是在運行時使用隨機埠映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的埠

以前所有容器都運行於默認橋接網絡中,因此所有容器互相之間都可以直接訪問,這樣存在一定的安全性問題。於是有了一個 Docker 引擎參數 --icc=false,當指定該參數後,容器間將默認無法互訪,除非互相間使用了 --links 參數的容器才可以互通,並且只有鏡像中 EXPOSE 所聲明的埠才可以被訪問。這個 --icc=false 的用法,在引入了 docker network 後已經基本不用了,通過自定義網絡可以很輕鬆的實現容器間的互聯與隔離。

要將 EXPOSE 和在運行時使用 -p <宿主埠>:<容器埠> 區分開來。-p,是映射宿主埠和容器埠,換句話說,就是將容器的對應埠服務公開給外界訪問,而 EXPOSE 僅僅是聲明容器打算使用什麼埠而已,並不會自動在宿主進行埠映射。

基於 EXPOSE 指令的上述限制,Dockerfile 的作者一般在包含 EXPOSE 規則時都只將其作為哪個埠提供哪個服務的提示。使用時,還要依賴於容器的操作人員進一步指定網絡規則,需要配合 docker run -p PORT:EXPORT 使用,這樣 EXPOSE 設置的埠號會被指定需要映射到宿主機器的埠,這時要確保宿主機器上的埠號沒有被使用。如果直接指定 docker run-p EXPORT,這樣 EXPOSE 設置的埠號會被隨機映射成宿主機器中的一個埠號。不過通過 EXPOSE 命令文檔化埠的方式十分有用。

相關焦點

  • 雲計算核心技術Docker教程:run 命令詳解
    來源:TechWeb.com.cn在docker客戶端命令行中,我們可以直接輸入 docker 命令來查看到 Docker 客戶端的所有命令選項。可以通過命令 docker command help 更深入的了解指定的 Docker 命令使用方法。
  • 雲計算核心技術Docker教程:info/version命令詳解
    來源:TechWeb.com.cn在docker客戶端命令行中我們可以使用info命令 顯示 Docker 系統信息,包括鏡像和容器數,通過version命令顯示 Docker 版本信息。示例docker info : 顯示 Docker 系統信息,包括鏡像和容器數語法docker info [OPTIONS]OPTIONS說明:-f :指定返回值的模板文件
  • 雲計算核心技術Docker教程:Docker鏡像使用
    使用命令 docker pull 來下載鏡像,下載完成後,使用命令docker run httpd我們就可以使用這個鏡像了。為此,我們需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建我們的鏡像。
  • 雲計算核心技術Docker教程:Dockerfile文件CMD命令詳解
    Dockerfile文件ADD指令是用於指定默認的容器主進程的啟動命令。Docker 不是虛擬機,容器就是進程。既然是進程,那麼在啟動容器的時候,需要指定所運行的程序及參數。
  • 雲計算核心技術Docker教程:Compose使用
    通過 Compose,您可以使用 YML 文件來配置應用程式需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。Compose 使用的三個步驟:1.使用 Dockerfile 定義應用程式的環境。
  • 雲計算核心技術Docker教程:Dockerfile文件ARG命令詳解
    Dockerfile 中的 ARG 指令是定義參數名稱,以及定義其默認值。該默認值可以在構建命令 docker build 中用 --build-arg 參數名=值 來覆蓋。
  • 雲計算核心技術Docker教程:pull/push命令詳解
    來源:TechWeb.com.cn在docker客戶端命令行中我們可以使用pull從鏡像倉庫中拉取或者更新指定鏡像,使用push將本地的鏡像上傳到鏡像倉庫。示例:docker pull : 從鏡像倉庫中拉取或者更新指定鏡像語法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]OPTIONS說明:
  • 雲計算核心技術Docker教程:rm/rmi命令詳解
    在docker客戶端命令行中我們可以使用rm刪除一個或多個容器,使用rmi刪除本地一個或多少鏡像。示例:docker rm :刪除一個或多個容器。例如,強制刪除容器 db01、db02,命令如下:$ docker rm -f db01 db02移除容器 nginx01 對容器 db01 的連接,連接名 db:$ docker rm -l db刪除容器 nginx01, 並刪除容器掛載的數據卷:$ docker rm -v nginx01刪除所有已經停止的容器
  • 雲計算核心技術Docker教程:Dockerfile文件ENTRYPOINT命令詳解
    Dockerfile文件ENTRYPOINT指令和 CMD 一樣,都是在指定容器啟動程序及參數。ENTRYPOINT 在運行時也可以替代,不過比 CMD 要略顯繁瑣,需要通過 docker run 的參數 --entrypoint 來指定。
  • 雲計算核心技術Docker教程:Dockerfile指令詳解
    來源:TechWeb.com.cnDockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。COPY複製指令,從上下文目錄中複製文件或者目錄到容器裡指定路徑。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。注意:如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效。格式:CMDCMD ["","","",...]
  • 雲計算核心技術Docker教程:build 命令詳解
    來源:TechWeb.com.cnDockerfile是一個用來構建鏡像的文本文件,在docker客戶端命令行中我們可以通過docker build 命令使用Dockerfile文件來創建鏡像。使用URL github.com/creack/docker-firefox 的 Dockerfile 創建鏡像:docker build github.com/creack/docker-firefox也可以通過 -f Dockerfile 文件的位置:
  • 雲計算核心技術Docker教程:Docker容器使用
    docker 客戶端非常簡單 ,我們可以直接輸入 docker 命令來查看到 Docker 客戶端的所有命令選項。可以通過命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
  • 雲計算核心技術Docker教程: Docker 安裝 Redis
    本文介紹通過docker安裝redis。1.我們用 docker search redis 命令來查看可用版本:3.查看本地鏡像,使用以下命令來查看是否已安裝了 redis:$ docker images
  • 雲計算核心技術Docker教程:docker-compose up命令介紹
    通過 Compose,您可以使用 YML 文件來配置應用程式需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。在下載安裝Docker Compose後通過創建 Dockerfile 文件就可以使用Docker Compose命令構建和啟動應用了,本文主要介紹docker-compose up命令。
  • 雲計算核心技術Docker教程:docker Stack介紹
    docker stack和docker-compose使用方式相同,但是為什麼引入docker stack技術呢。文件中定義的 services、volumes 、networks資源。兩者的不同點docker stack 不支持 compose file中的「build」指令, 相比之下docker-compose可現場創建鏡像,更適合迭代開發、測試和 快速驗證原型。
  • 雲計算核心技術Docker教程:docker-compose 常用命令介紹
    通過 Compose,您可以使用 YML 文件來配置應用程式需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。在下載安裝Docker Compose後通過創建 Dockerfile 文件就可以使用Docker Compose命令構建和啟動應用了,本文主要介紹docker-compose的常用命令。
  • 雲計算核心技術Docker教程:Docker Machine 使用 - TechWeb
    Docker Machine 是一個工具,它允許你在虛擬宿主機上安裝Docker,並使用docker-machine命令管理這個宿主機,可以使用Docker Machine在本地的MAC或者windows box、公司網絡,數據中心或者AWS這樣的雲提供商上創建docker。
  • 雲計算核心技術Docker教程:create/commit命令詳解
    來源:TechWeb.com.cn在docker客戶端命令行中我們可以使用create命令創建一個新的容器但不啟動它,通過commit命令從容器創建一個新的鏡像。示例docker create :創建一個新的容器但不啟動它,跟run用法相同。語法docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 雲計算核心技術Docker教程:Docker Compose run命令詳解
    -p, --publish=[] 開放埠--service-ports compose文件中配置什麼埠,就映射什麼埠.--use-aliases 使用網絡服務的網絡別名(s)容器連接。-v, --volume=[] 綁定掛載卷-T 禁用TTY.
  • 雲計算核心技術Docker教程:cp/diff命令詳解
    來源:TechWeb.com.cn在docker客戶端命令行中我們可以使用cp命令在容器與主機之間拷貝數據,使用diff命令檢查容器裡文件結構的更改。示例docker cp :用於容器與主機之間的數據拷貝。