Dockerfile 指令詳解

2021-07-10 10:27:10 字數 2353 閱讀 5056

一種通過commit的方式:把做了一系列操作的容器關閉,然後利用docker的commit指令:dockercommit 容器id 映象名:tag。然後dockerpush到映象倉庫。別人pull下來的再次啟動的時候,就是你當前的操作的形態。

另一種是通過dockerfile構建的方式:把操作的步驟通過指令碼的形式寫下來,然後構建的時候,docker會按照你寫的步驟,一步一步構建。這是目前主流的構建方式。

格式為 from或 from:

第一條指令必須是from指令。並且,如果在同乙個dockerfile中建立多個映象時,可以使用多個from指令(每個映象一次)。

maintainer:格式為maintaier,指定維護者資訊。

格式為run 或者run [「executable」,「param1」,「param2」]。

前者將在shell終端中執行的命令,即/bin/sh–c;後者則使用exec執行。指定使用其他終端可以通過第二種方式實現,例如run[「/bin/bash」,「-c」,「echohello」]。每條run指令將在當前映象基礎上執行指定命令,並提交為新的映象。當命令較長時可以使用\來換行。

指定容器啟動後執行的命令,一般都是早就寫好的指令碼,例如:cmd[「/run.sh」]。注意:如果dockerfile中指定了多條命令,只有最後一條會被執行。如果使用者啟動時候加了執行的命令,則會覆蓋掉cmd指定的指令。

告訴docker服務端容器需要暴露的埠號,供互聯系統使用。在啟動容器時需要通過-p(注意是大寫),docker主機會自動分配乙個埠**到指定的埠;使用-p,則可以具體指定哪個本地埠對映過來。

例如:我在elasticsearch映象的dockerfile中指定了暴露出9200和9300埠,我可以在dockerfile中寫:

於是,這倆埠就暴露出來了,但是外界想訪問的話如果不在啟動的時候加上對應的對映到本地埠,docker就會自動分配乙個埠,通過dockerps 可以找到docker自動分配了

哪個埠。

如果加上對映:docker run –p 9200:9200 –p 9300:9300 elasticsearch

這樣,通過本機的9200埠和9300埠就可以訪問docker容器了。

1、建立的時候給容器中加上個需要的環境變數。2、指定乙個值,為後續的run指令服務

將複製指定的的檔案複製到容器中。格式為 add  src必須為dockerfile所在位置的相對路徑,也可以是乙個url;還可以是乙個tar檔案(自動解壓為目錄)

複製本地的檔案或目錄到容器中。目標路徑不存在時,會自動建立。(和add類似,個人沒發現啥區別)

配置容器啟動後執行的命令,並且不可被dockerrun 提供的引數覆蓋。

每個dockerfile中只能有乙個entrypoint,當指定多個entrypoint時,只有最後乙個生效。和cmd相似,卻有不同。

[「/data」]建立乙個掛在點,可以從本機或其他容器掛載的掛載點。意思就是從容器中暴露出一部分,和外界共享這塊東西,一般放資料庫的資料或者是**。在容器啟動執行的時候,如果需要將volume暴露的東西和本地的乙個資料夾進行對映,想要通過本地檔案直接訪問容器中暴露的部分,可以在執行的時候進行對映:

docker run –v 本地路徑:容器需要掛載的路徑image 

但是有乙個問題,在構建完畢第一次進行啟動的時候,會以對映的本地環境為主,所以如果說本地環境為空,那麼對應的容器中的檔案將會變為空。

如果不指定本地的對映目錄,那麼docker會自動對映乙個目錄到本地(mac和windows是被對映到docker machine中了),可以通過指令 docker inspect  container_name 來檢視具體位置

指定執行容器時的使用者名稱或者uid,後續的run也會使用指定的使用者。當服務不需要管理員許可權時,可以通過該命令指定執行使用者。並且可以在之前建立所需要的使用者。

要臨時獲取管理員許可權的時候要使用gosu,不推薦使用sudo。如果不指定,容器預設是root執行。

定義工作目錄,如果容器中沒有此目錄,會自動建立

配置當所建立的景象作為其他新建立景象的基礎映象時,所執行的操作指令。

例如,dockerfile使用如下內容建立了映象image-a

#自動新增

Dockerfile指令詳解

dockerfile中包括from maintainer run cmd expose env add copy entrypoint volume user workdir onbuild等13個指令。下面一一講解。1.from 格式為from image或from image tag,並且doc...

Dockerfile指令詳解

dockerfile中包括from maintainer run cmd expose env add copy entrypoint volume user workdir onbuild等13個指令。下面一一講解。1.from 格式為from image或from image tag,並且doc...

Dockerfile指令詳解

什麼是dockerfile dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。當你在使用...