日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker之Dockerfile指令介绍

發布時間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker之Dockerfile指令介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Docker通過對于在Dockerfile中的一系列指令的順序解析實現自動的image的構建 通過使用build命令,根據Dockerfiel的描述來構建鏡像 通過源代碼路徑的方式 通過標準輸入流的方式 通過源代碼路徑Dockerfile需要放置在項目的根目錄位置在構建的時候,Dockerfile client會把整個context打包發送到Docker Server端,然后由server端負責build鏡像,在構建成功后,會刪除context目錄docker build -t {鏡像名字} {項目路徑可以是相對路徑}

  docker利用Dockerfile來構建新鏡像之前,先來了解一下Dockerfile創建中使用到的指令

通過標準輸入流:

通過標準輸入流的方式獲取Dockerfile的內容 client不會打包上傳context目錄,因此對于一些ADD、COPY等涉及host本地文件復制的操作不能夠支持 docker build -t {鏡像名字} - < Dockerfile路徑 build cache:Dockerfile中的每一個指令執行完畢后,都會提交為一個image,這樣保證了指令之間不會有影響Dockerfile會盡可能嘗試重用之前已經構建的鏡像可以通過在build命令中增加--no-cache的方式來禁用這個cacheDockerfile指令:只支持Docker自己定義的一套指令,不支持自定義大小寫不敏感,但是建議全部使用大寫根據Dockerfile的內容順序執行 FROM: FROM {base鏡像} 必須放在DOckerfile的第一行,表示從哪個baseimage開始構建 MAINTAINER:可選的,用來標識image作者的地方RUN:每一個RUN指令都會是在一個新的container里面運行,并提交為一個image作為下一個RUN的base一個Dockerfile中可以包含多個RUN,按定義順序執行RUN支持兩種運行方式:RUN <cmd> 這個會當作/bin/sh -c “cmd” 運行RUN [“executable”,“arg1”,。。],Docker把他當作json的順序來解析,因此必須使用雙引號,而且executable需要是完整路徑  RUN?都是啟動一個容器、執行命令、然后提交存儲層文件變更。第一層?RUN command1?的執行僅僅是當前進程,一個內存上的變化而已,其結果不會造成任何文件。而到第二層的時候,啟動的是一個全新的容器,跟第一層的容器更完全沒關系,自然不可能繼承前一層構建過程中的內存變化。而如果需要將兩條命令或者多條命令聯合起來執行需要加上&&。如:cd /usr/local/src && wget xxxxxxxCMD:CMD的作用是作為執行container時候的默認行為(容器默認的啟動命令)當運行container的時候聲明了command,則不再用image中的CMD默認所定義的命令一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最后一個才會起作用CMD定義的三種方式:CMD <cmd> 這個會當作/bin/sh -c "cmd"來執行CMD ["executable","arg1",....]CMD ["arg1","arg2"],這個時候CMD作為ENTRYPOINT的參數

EXPOSE 聲明端口

  格式為?EXPOSE <端口1> [<端口2>...]。

  EXPOSE?指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時并不會因為這個聲明應用就會開啟這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是?docker run -P?時,會自動隨機映射?EXPOSE?的端口。

entrypoint:entrypoint的作用是,把整個container變成了一個可執行的文件,這樣不能夠通過替換CMD的方法來改變創建container的方式。但是可以通過參數傳遞的方法影響到container內部每個Dockerfile只能夠包含一個entrypoint,多個entrypoint只有最后一個有效當定義了entrypoint以后,CMD只能夠作為參數進行傳遞entrypoint定義方式:entrypoint ["executable","arg1","arg2"],這種定義方式下,CMD可以通過json的方式來定義entrypoint的參數,可以通過在運行container的時候通過指定command的方式傳遞參數entrypoint <cmd>,當作/bin/bash -c "cmd"運行命令ADD & COPY:當在源代碼構建的方式下,可以通過ADD和COPY的方式,把host上的文件或者目錄復制到image中ADD和COPY的源必須在context路徑下當src為網絡URL的情況下,ADD指令可以把它下載到dest的指定位置,這個在任何build的方式下都可以workADD相對COPY還有一個多的功能,能夠進行自動解壓壓縮包ENV:ENV key value用來設置環境變量,后續的RUN可以使用它所創建的環境變量當創建基于該鏡像的container的時候,會自動擁有設置的環境變量WORKDIR:用來指定當前工作目錄(或者稱為當前目錄)當使用相對目錄的情況下,采用上一個WORKDIR指定的目錄作為基準USER:指定UID或者username,來決定運行RUN指令的用戶ONBUILD:ONBUILD作為一個trigger的標記,可以用來trigger任何Dockerfile中的指令可以定義多個ONBUILD指令當下一個鏡像B使用鏡像A作為base的時候,在FROM A指令前,會先按照順序執行在構建A時候定義的ONBUILD指令ONBUILD <DOCKERFILE 指令> <content>VOLUME:用來創建一個在image之外的mount point,用來在多個container之間實現數據共享運行使用json array的方式定義多個volumeVOLUME ["/var/data1","/var/data2"]或者plain text的情況下定義多個VOLUME指令 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的docker之Dockerfile指令介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。