DockerFile 命令總結

2021-12-22 K8S中文社區

只描述非windows系統。

FROM [:] [AS ]: 設置基礎鏡像

FROM alpine:latest

RUN \ ["executable", "param1", "param2"]: 執行shell腳本。進來少使用RUN,因為沒執行一次 docker就會增加一層只讀層。

RUN /bin/bash -c 'source $HOME/.bashrc; \

echo $HOME'

等同於

RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'

等同於

RUN ["/bin/bash", "-c", "source $HOME/.bashrc; echo $HOME"]

CMD ["executable","param1","param2"] \ ["param1","param2"] \ command param1 param2: DockerFile中只有一個CMD,多於一個將執行最後一個。它的意思差不多就是啟動容器後執行的默認命令。

FROM *:*

CMD ["catalina.sh", "run"]

LABEL = = ... : 鏡像標籤

LABEL "com.example.vendor"="ACME Incorporated"

LABEL com.example.label-with-value="foo"

LABEL version="1.0"

LABEL description="This text illustrates \

that label-values can span multiple lines."

EXPOSE [/...]: 暴露容器的埠

EXPOSE 80/tcp

EXPOSE 80/udp

ENV \ =: 設置容器環境變量。可以使用docker run --env =修改環境變量

ENV myName John Doe

ENV myDog Rex The Dog

ENV myCat fluffy

ADD [--chown=:] ... \ [--chown=:] ["",... ""]: 拷貝一個新文件,或者文件夾或者遠程文件的 URLS,把他們添加到,鏡像的文件系統中。 為絕對路徑或者由WORKDIR定義的相對路徑。

ADD hom* /mydir/         # 添加所有以 "hom" 開頭的文件

ADD hom?.txt /mydir/     # ? 替換任何單個的字符, e.g., "home.txt"

ADD test relativeDir/    # 添加 "test" 到 `WORKDIR`/relativeDir/

ADD test /absoluteDir/   # 添加 "test" 到 /absoluteDir/

ENV cpath /home/zb

ARG zbpath=/home/lala

WORKDIR $cpath

ADD **.jpg $cpath

ADD **.jpg $zbpath

# 添加含有特殊字符的文件或者文件夾時如「[]」,需要遵循 golang 的規則將它們進行轉義,以防它們為匹配模式

ADD arr[[]0].txt /mydir/ # 複製一個文件名為 "arr[0].txt" 到 /mydir/

# 通過 --chown 指定添加文件或者文件夾的用戶名和組名

ADD --chown=55:mygroup files* /somedir/

ADD --chown=bin files* /somedir/

ADD --chown=1 files* /somedir/

ADD --chown=10:11 files* /somedir/

COPY [--chown=:] ... / [--chown=:] ["",... ""]: 與 ADD命令差不多。

ENTRYPOINT ["executable", "param1", "param2"] / command param1 param2: 容器啟動後執行該命令。如果定義ENTRYPOINT 那麼CMD形式就變為CMD ["param1","param2"] json數組中變為ENTRYPOINT的第一個參數和第二個參數

ARG VERSION=latest

FROM alpine:$VERSION

ENTRYPOINT ["ls", "-la"]

ENTRYPOINT與CMD的比較

1.當有多個ENTRYPOINT CMD它們都只執行最後一個

2.當容器為一個可執行文件時應該定義ENTRYPOINT

3.當同時定義ENTRYPOINT 和 CMD時,CMD為ENTRYPOINT的默認參數

4.當docker執行run命令時,在裡面指定CMD時,CMD將會被重寫。

VOLUME ["/data"]: 在製作鏡像時掛載卷。會在宿主機上自動生成一個對應的共享目錄。

RUN mkdir /data1

RUN touch /data1/2a.txt

VOLUME /data1

# 通過命令 docker inspect hasVvolume

"Mounts": [

           {

               "Type": "volume",

               "Name": "0d63fcdf621ee728bb85dfcc2b30f3acddf6489a0e93b81ced17f05860497321",

               "Source": "/var/lib/docker/volumes/0d63fcdf621ee728bb85dfcc2b30f3acddf6489a0e93b81ced17f05860497321/_data",

               "Destination": "/data1",

               "Driver": "local",

               "Mode": "",

               "RW": true,

               "Propagation": ""

           }

       ]

========================================================================================================================

# 也可以通過 docker run -v 來掛載共享目錄,這時 Source 指出 -v 時定義的目錄

"Mounts": [

       {

               "Type": "bind",

               "Source": "/Users/zhangbo/Desktop/data1",

               "Destination": "/data1",

               "Mode": "",

               "RW": true,

               "Propagation": "rprivate"

           }

       ]

容器中共享目錄

# 使用 --volumes-from,達到容器中文件夾共享

docker run -itd --name noVvolume-v-1 --volumes-from noVvolume-v 48cd9e43b6a9

USER [:] / [:]: 給鏡像添加一個用戶

WORKDIR /path/to/workdir or WORKDIR to_workdir /path/to/workdir: 為 RUN, CMD, ENTRYPOINT, COPY, ADD 創建工作目錄

ENV DIRPATH /path

WORKDIR $DIRPATH/$DIRNAME

RUN pwd

ARG [=] : docker file中的變量

FROM busybox

ARG user1="zhang bo"

ARG buildno

RUN echo $user1

RUN echo $buildno

Step */* : RUN echo $user1

---> Running in a56a602a8f87

zhang bo

Removing intermediate container a56a602a8f87

---> 3e9c6ec19129

Step */* : RUN echo $buildno

---> Running in 6598768a1080

預製變量

FROM ubuntu

ARG CONT_IMG_VER

ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}

RUN echo $CONT_IMG_VER

# 可以通過 --build-arg 標籤進行給定的預製的變量。--build-arg <varname>=<value>

docker run --build-arg CONT_IMG_VER=******* .

docker 常用命令如下

管理命令:

 container   管理容器

 image       管理鏡像

 network     管理網絡

 node        管理Swarm節點

 plugin      管理插件

 secret      管理Docker secrets

 service     管理服務

 stack       管理Docker stacks

 swarm       管理Swarm集群

 system      查看系統信息

 volume      管理卷

 如:docker container ls 顯示所有容器

普通命令:

 attach     進入一個運行的容器

 build      從一個DockerFile構建鏡像

 commit     從容器創建一個鏡像

 cp          從容器和主機文件系統之間拷貝文件

 create      創建一個容器

 diff        檢查容器文件系統上的更改

 events      從伺服器獲取實時事件

 exec        在正在運行的容器中運行命令

 export      將容器的文件系統導出為tar存檔

 history     顯示鏡像的歷史記錄

 images      查看鏡像列表

 import      從歸檔文件中創建鏡像

 info        顯示系統範圍的信息

 inspect     返回Docker對象的低級信息

 kill        kill運行中的容器

 load        從存檔或者STDIN加載鏡像

 login       登陸docker鏡像倉庫

 logout      退出docker鏡像倉庫

 logs        獲取一個容器的日誌

 pause       暫停一個或多個容器中的所有進程

 port        查看埠映射或容器的特定映射列表

 ps          查看容器列表

 pull        從鏡像倉庫拉取鏡像

 push        將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫

 rename      重命名容器

 restart     重啟容器

 rm          刪除容器

 rmi         刪除鏡像

 run         創建一個新的容器並運行一個命令

 save        將指定鏡像保存成 tar 歸檔文件

 search      從Docker Hub搜索鏡像

 start       啟動容器

 stats       實時顯示容器資源使用情況的統計信息

 stop       停止容器

 tag         標記本地鏡像,將其歸入某一倉庫

 top         展示一個容器中運行的進程

 unpause     恢復容器中所有的進程

 update      更新容器配置

 version     顯示Docker的版本信息

 wait        阻塞直到容器停止,然後列印退出代碼

 如:docker images 顯示所有鏡像

參考:

阿波羅程序猿

https://www.jianshu.com/p/ed4818838385

胡海超

http://www.cnblogs.com/cblogs/p/dockerCommand.html

---END---

Kubernetes線下實戰培訓,採用3+1新的培訓模式(3天線下實戰培訓,1年內可免費再次參加),資深一線講師,實操環境實踐,現場答疑互動,培訓內容覆蓋:Docker架構、鏡像、數據存儲、網絡、以及最佳實踐。Kubernetes實戰內容,Kubernetes設計、Pod、常用對象操作,Kuberentes調度系統、QoS、Helm、網絡、存儲、CI/CD、日誌監控等。<了解更多詳情>

北京站:12月30-31日,1月1日(元旦3天),深圳站:12月21-23日;上海站:1月4-6日; 諮詢/報名:曹輝/15999647409

相關焦點

  • Dockerfile 中的 COPY 與 ADD 命令
    和 ADD,本文嘗試解釋這兩個命令的基本功能,以及其異同點,然後總結其各自適合的應用場景。在使用 docker build 命令通過 Dockerfile 創建鏡像時,會產生一個 build 上下文(context)。所謂的 build 上下文就是 docker build 命令的 PATH 或 URL 指定的路徑中的文件的集合。在鏡像 build 過程中可以引用上下文中的任何文件,比如我們要介紹的 COPY 和 ADD 命令,就可以引用上下文中的文件。
  • docker容器dockerfile詳解
    docker公司在容器技術發展中提出了鏡像分層的理念,可以說也是這個革命性的理念讓原本只不過是整合linux內核特性的容器
  • 雲計算核心技術Docker教程:Dockerfile文件ARG命令詳解
    Dockerfile 中的 ARG 指令是定義參數名稱,以及定義其默認值。該默認值可以在構建命令 docker build 中用 --build-arg 參數名=值 來覆蓋。
  • Dockerfile與Docker構建流程解讀
    我希望你已經:1.用過Docker,熟悉docker commit命令2.自己動手編寫過Dockerfile3.自己動手build過一個鏡像,有親身的體驗我主要分享一些現在網上或者文檔中沒有的東西,包括我的理解和一些實踐,有誤之處也請大家指正。好了,正文開始:Dockerfile其實可以看做一個命令集。每行均為一條命令。
  • 雲計算核心技術Docker教程:Dockerfile文件ENTRYPOINT命令詳解
    Dockerfile文件ENTRYPOINT指令和 CMD 一樣,都是在指定容器啟動程序及參數。ENTRYPOINT 在運行時也可以替代,不過比 CMD 要略顯繁瑣,需要通過 docker run 的參數 --entrypoint 來指定。
  • 雲計算核心技術Docker教程:Dockerfile文件CMD命令詳解
    Dockerfile文件ADD指令是用於指定默認的容器主進程的啟動命令。Docker 不是虛擬機,容器就是進程。既然是進程,那麼在啟動容器的時候,需要指定所運行的程序及參數。
  • Docker基礎篇(Dockerfile)-雲原生核心
    編寫Dockerfile文件)A --> D(2. docker build)A --> E(3. docker run)腳本文件的樣式,以centos為例在這裡插入圖片描述腳本文件內容FROM scratchADD centos-7-x86_64-docker.tar.xz /LABEL
  • 雲計算核心技術Docker教程:Dockerfile文件EXPOSE命令詳解
    Dockerfile文件EXPOSE 指令是聲明運行時容器提供服務埠,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個埠的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護埠,以方便配置映射;另一個用處則是在運行時使用隨機埠映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的埠。
  • Dockerfile使用入門
  • Docker 快速入門之 Dockerfile
    答案當然是可以的,在 Docker 中我們可以從名為 Dockerfile 的文件中讀取指令並且自動構建鏡像。在本文中,將介紹 Dockerfile 的基本語法以及基本知識。1、Dockerfile 是什麼?Dockerfile 其實是一份文本文檔,裡面包含了用戶可以用來操作鏡像的一些指令。
  • Dockerfile常用使用方法
    Docker從Dockerfile中讀取指令,以自動執行原本手動執行的步驟來創建映像。要構建鏡像,請創建一個名為Dockerfile的文件。Dockerfile描述了組裝映像所需的步驟。創建Dockerfile後,調用docker build命令,使用包含Dockerfile的目錄的路徑作為參數。
  • 雲計算核心技術Docker教程:Dockerfile指令詳解
    CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。注意:如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效。格式:CMDCMD ["","","",...]
  • dockerfile中ENTRYPOINT與CMD的結合
    因為這兩個命令是掌握dockerfile編寫的核心,所以這邊還是單獨拿出來再講一講。二、CMD 與 ENTRYPOINT主要區別我們直接進入主題,CMD 與 ENTRYPOINT都是用於指定啟動容器執行的命令,區別在於:•當docker run 命令中有參數時,守護進程會忽略CMD命令。
  • Docker小白到實戰之Dockerfile解析及實戰演示,果然順手
    Dockerfile簡介在日常開發過程中,需要編寫對應的程序文件,最後通過編譯打包生成對應的可執行文件或是類庫;這裡的Dockerfile文件就好比平時我們編寫的程序文件,但內部的語法和關鍵字並沒有程序那麼複雜和繁多,相對來說還是很簡單的,最後通過docker build命令就可以將對應的程序、文件、環境等構建成鏡像啦。
  • 學習Docker就應該掌握的dockerfile語法與指令
    在日常的工作中,常常需要製作自己的項目的鏡像
  • Dockerfile官方文檔詳細介紹
    Docker可以通過閱讀Docker的指令來自動構建映像 Dockerfile。A Dockerfile是一個文本文檔,其中包含用戶可以在命令行上調用以組裝圖像的所有命令。使用docker build 用戶可以創建自動構建,該構建連續執行多個命令行指令。本頁描述您可以在中使用的命令Dockerfile。
  • docker鏡像及容器命令
    一、Docker鏡像命令1. 鏡像管理命令介紹docker image2.導出鏡像導入導出10.1 鏡像導入docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]10.2 鏡像導入docker image load
  • Dockerfile最佳實踐
    在容器領域,docker 公司提出的容器鏡像已經成為目前容器打包交付的事實標準。構建鏡像需要編寫 Dockerfile,如何編寫一個優雅的 Dockerfile 呢?在 Docker 公司的官方文檔中給出了一篇  Best practices for writing Dockerfiles。
  • Dockerfile文件全面詳解
    Dockerfile 是一個文本文檔,其中包含了用戶創建鏡像的所有命令和說明。變量用 $variable_name 或者 ${variable_name} 表示。變量前加 \ 可以轉義成普通字符串:\$foo or \${foo},表示轉換為 $foo 和 ${foo} 文字。
  • Dockerfile 文件全面詳解
    如果找不到該 tag 值,構建器將返回錯誤。--platform 標誌可用於在 FROM 引用多平臺鏡像的情況下指定平臺。例如,linux/amd64、linux/arm64、 或 windows/amd64。將在當前鏡像之上的新層中執行命令,在 docker build時運行。