docker build ——“.”


原文:docker build 命令后 . 號的意思

參考文章: https://yeasy.gitbooks.io/docker_practice/content/image/build.html

 

我們在使用 docker build 命令去構建鏡像時,往往會看到命令最后會有一個 . 號。

docker build -t xxx .

  

這里的 . 號代表什么意思呢?

在跟后端小悅悅同學交流的過程中,就發現小悅悅同學對 . 號的理解有所偏差,以為是用來指定 Dockerfile 文件所在的位置的,但其實 -f 參數才是用來指定 Dockerfile 的路徑的,那么 . 號究竟是用來做什么的呢?

 

Docker 在運行時分為 Docker引擎(服務端守護進程) 以及 客戶端工具

我們日常使用各種 docker 命令,其實就是在使用客戶端工具與 Docker 引擎 進行交互。

 

那么當我們使用 docker build 命令來構建鏡像時,這個構建過程其實是在 Docker引擎 中完成的,而不是在本機環境

 

那么如果在 Dockerfile 中使用了一些 COPY 等指令來操作文件,如何讓 Docker引擎 獲取到這些文件呢?

這里就有了一個 鏡像構建上下文 的概念,當構建的時候,由用戶指定構建鏡像的上下文路徑,而 docker build 會將這個路徑下所有的文件都打包上傳給 Docker 引擎,引擎內將這些內容展開后,就能獲取到所有指定上下文中的文件了。

 

比如說 dockerfile 中的 COPY ./package.json /project,其實拷貝的並不是本機目錄下的 package.json 文件,而是 docker引擎 中展開的構建上下文中的文件,所以如果拷貝的文件超出了構建上下文的范圍,Docker引擎 是找不到那些文件的

 

所以 docker build 最后的 . 號,其實是在指定鏡像構建過程中的上下文環境的目錄

理解了上面的這些概念,就更方便的去理解 .dockerignore 文件的作用了。

關於 .dockerignore 的使用參見另一篇博文:.dockerignore 文件的作用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM