Docker 0x05: Dockerfile製做鏡像

Dockerfile製做鏡像

[toc]python

dockerfile 能夠是製做本身鏡像的腳本文件,按照這個腳本文件執行,就能製做出鏡像了docker

一句話什麼是dockerfile

Dockerfile : automate the steps of creating a Docker imageshell

dockerfile腳本指令

  1. FROM base-image 指定基礎鏡像,做爲構建新鏡像的底層
  2. MAINTAINER zhangjiaqi77777@outlook.com 指定鏡像的構建者
  3. RUN 命令 後面的命令就像相似shell腳本的命令同樣。每個RUN就是一層鏡像。
  4. CMD 指令 用於指定啓動容器默認的主進程命令。由於容器其實就是進程,它不像虛擬機那樣啓動後不運行任何東西也能靜默運行。容器須要有一個主進程一直持續,而後就會退出。能夠想象,容器就是一個包着一個主進程在那裏跑,主進程就是容器的靈魂,靈魂沒了,容器也會消失。注意命令:若是是shell 格式 sh -c "執行行命令" 那麼這是經過shell做爲主程序運行,當shell執行完子進程,shell就執行完成,主進程也就退出,那麼容器也就退出了。因此咱們儘可能使用直接二進制文件執行的方式,不用shell -c 執行。而是CMD ["", "", ""] 將命令空格拆分到列表中。這樣只要主進程一致運行,那麼容器也就不會退出。
  5. ENTRYPOINT 後面跟上 ["", "", ""] 命令 An ENTRYPOINT allows you to configure a container that will run as an executable 這樣容器在啓動時,如docker run ,容器像是一個可執行程序同樣,執行ENTRYPOINT 指定的可執行程序,並將CMD 主進程的命令列表,做爲參數傳遞給ENTRYPOINT。 有什麼做用,能夠做爲啓動容器主進程前的預處理程序。如檢查設置相關。。。(dockerfile只能有一個)
  6. COPY 指令 從外界(URL)複製文件到容器的文件系統中
  7. ADD 指令 相似COPY,除了URL外還支持一個歸檔文件,並在copy到目的路徑後解包。
  8. ENV 設置容器中的環境變量
  9. ARG 定義build時的上下文變量,這裏的變量定義能夠設置默認值,若是在docker build --build-arg 傳入了對應名字的變量時,這個變量值將使用傳入的值。相似於python腳本的經過argv接受參數功能。ARG定義的變量取值方式和EVN同樣,前面加$,關於ARG與ENV名稱衝突,已ENV優先。
  10. LABEL 設置一些元信息,LABEL設定的在鏡像間時可繼承的。
  11. WORKDIR /home/test 指定工做路徑,像RUN,CMD, ENTRYPOINT, COPY, ADD 的工做目錄。能夠多個WORKDIR 指定,來切換路徑,而且能夠相對路徑。
  12. VOLUME指令 因爲容器運行時產生的數據須要持久化,那麼就須要給容器建立掛載點,掛載點就是VOLUME指令指定的,這樣就容器就能夠將宿主機或者其它容器的卷掛在到這個點上。
  13. ONBUILD 是在做爲基礎鏡像時,在下游使用本鏡像時,出發這個操做在下游build上下文環境中。
  14. USER 爲運行之命令進程的用戶或用戶組。
  15. EXPOSE 和VOLUME相似,若是容器要提供網絡服務,那麼傳輸層的端口能夠經過EXPOSE先指定。可是不必定立刻就要使用。

小結

  1. 區分CMD ENTRYPOINT的功能
  2. 理解VOLUME EXPOSE 這兩個對外接口
  3. ARG 與 ENV 衝突的話,優先級
  4. USER 指定進程用戶用戶組相關
  5. RUN 是基礎鏡像中執行的命令
相關文章
相關標籤/搜索