天天看點

微服務架構從入門到精通之容器化(四) Dockerfile

     上篇文章《Docker常用指令》介紹了Docker的基本知識,接下來本章主要講解Dockerfile。Dockerfile由一系列的指令和參數組成。每條指令都必須大寫,并且後面跟随參數。

FROM ubuntu
MAINTAINER zhuxihua "[email protected]"
RUN mkdir -p /Users/zhuxihua/jdk
ADD jdk-8u112-linux-x64.tar.gz /Users/zhuxihua/jdk
COPY xxx-1.0.0.jar /Users/zhuxihua/webapp/
ENV JAVA_HOME /Users/zhuxihua/jdk/jdk1.8.0_112
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8081
CMD ["java","-jar","/Users/zhuxihua/webapp/xxx-1.0.0.jar"]
           

    Dockerfile中的指令按順序從上往下執行。Docker從基礎鏡像ubuntu運作一個容器,執行一條指令并修改容器送出一個新的鏡像層,基于此鏡像層在運作一個新的容器執行Dockerfile中的下一條指令,直到所有指令都執行完畢

當鏡像建構完成後,Docker删除了很多臨時的容器。

  • RUN指令:預設情況下,RUN指令會在shell裡使用指令包裝器/bin/sh -c 來執行。也可以用exec格式的RUN指令,如RUN ["mkdir","-p","/

    Users/zhuxihua

    /jdk"]
  • ADD指令:ADD指令用來建構環境下的檔案和目錄複制到鏡像中,它在複制的同時進行解壓,合法的檔案格式有gzip、bzip2、xz源檔案,同時還遲滞通過URL的方式下載下傳後在複制到指定的目錄。
  • COPY指令:copy指令非常類似ADD,不同是COPY隻關心在建構上下文複制本地檔案,而不會做提取和解壓檔案。
  • ENV指令:ENV指令用來在鏡像建構過程中設定環境變量,
    ENV JAVA_HOME /Users/zhuxihua/jdk/jdk1.8.0_112
    ENV PATH $PATH:$JAVA_HOME/bin
               

實際上就是設定了JAVA_HOME

  • EXPOSE指令:這條指令告訴Docker該容器内的應用程式将會使用容器指定端口。但是這并不意味可以自動通路該端口,而是需要在docker run時指定映射的端口,類似于
docker run -d -p 8080:8080 –name xxx
           

      如果不指定-p 8080:8080,實際上你通過端口8080端口是通路不到的。

  • CMD指令:CMD指令用于指定一個容器啟動時要運作的指令,有點類似于RUN指令,隻是RUN指令是建構鏡像的時要運作的指令,CMD是鏡像建構後要運作的指令。

繼續閱讀