Dockerfile

2023-01-04 15:00:34

Dockerfile

1、Dockerfile內容基礎知識

  1. 每條保留字指令必須為大寫字母,且後面跟隨至少一個引數
  2. 指令按照從上到下順序執行
  3. #表示註釋
  4. 每條指令都會建立一個新的映象層並對映象層進行提交

2、docker執行Dockerfile的大致流程

  1. docker從基礎映象執行一個容器
  2. 執行一條指令並對容器進行修改
  3. 執行類似docker commit的操作提交一個新的映象層
  4. docker再基於剛提交的映象執行一個新容器
  5. 執行Dockerfile中的下一條指令直到所有指令執行完成

3、Dockerfile常用保留字指令

  1. FROM
  • 基礎映象,當前映象是基於哪個映象的,指定一個已經存在的映象作為模板,第一條必須是FROM
  1. MAINTAINER
  • 映象維護者的姓名和郵箱地址
  1. RUN
  • 構建容器時需要執行的命令
  • 兩種格式
    • shell格式
    • exec格式
  • RUN是在docker build時執行
  1. EXPOSE
  • 當前容器對外暴露出的埠
  1. WORKDIR
  • 指定在建立容器後,終端預設登陸的進來工作目錄,一個落腳點
  1. USER
  • 指定該映象以什麼樣的使用者去執行,如果都不指定,預設是root
  1. ENV
  • 用來在構建映象過程中設定環境變數
  1. ADD
  • 將宿主機目錄下的檔案拷貝進映象且會自動處理URL和解壓tar包
  1. COPY
  • 類似ADD,拷貝檔案和目錄到映象中
  • 將從構建上下文目錄中<源路徑>的檔案/目錄複製到新的一層映象內的<目標路徑>位置
    • COPY src dest
    • COPY ["src","dest"]
    • <src源路徑>:原始檔或者源目錄
    • <dest目標路徑>:容器內的指定路徑,該路徑不用事先建好,路徑不存在的話,會自動建立
  1. VOLUME
  • 容器資料卷,用於資料儲存和持久化工作
  1. CMD
    • 指定容器啟動後要乾的事
    • 注意
      1. Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run 之後的引數替換
      2. 參考官網Tomcat的Dockerfile演示講解
    • 他和前面RUN命令的區別
      1. CMD是在docker run時執行
      2. RUN是在docker build 時執行
  2. ENTRYPOINT
    • 也是用於指定一個容器啟動時要執行的命令
    • 類似於CMD指令,但是ENTRYPOINT不會被docker run後面的指令覆蓋,而且這些命令列引數會被當做引數送給ENTRYPOINT指令指定的程式

4、編寫一個具備vim+ifconfig+jdk8的Centos7映象

  1. 去官網下載jdk-8u351-linux-x64.tar.gz
  1. 將下載的jdk-8u351-linux-x64.tar.gz傳到自己建立的/myfile資料夾中
  • mkdir /myfile
  1. vi Dockerfile
  • FROM centos:7.6.1810
    MAINTAINER zzyy<[email protected]>

    ENV MYPATH /usr/local
    WORKDIR $MYPATH

    #安裝vim編輯器
    RUN yum -y install vim
    #安裝ifconfig命令檢視網路IP
    RUN yum -y install net-tools
    #安裝java8及lib庫
    RUN yum -y install glibc.i686
    RUN mkdir /usr/local/java
    #ADD 是相對路徑jar,把jdk-8u351-linux-x64.tar.gz新增到容器中,安裝包必須要和Dockerfile檔案在同一位置
    ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
    #設定java環境變數
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    ENV PATH $JAVA_HOME/bin:$PATH

    EXPOSE 80

    CMD echo $MYPATH
    CMD echo "success--------------ok"
    CMD /bin/bash
  • 注意:由於最新版centos的什麼vim還是啥的源路徑改了,所以不能用FROM centos。這裡用的是FROM centos:7.6.1810
  1. 構建
    • docker build -t 新映象名字:TAG .
    • 注意TAG後面有個空格,空格後面有個點
  2. 執行
  • docker run -it 新映象名字:TAG
  1. 虛懸映象
  • 是什麼
    • 倉庫名、標籤都是的映象,dangling image
    • Dockerfile寫一個
    • mkdir test
      cd test/

      vi Dockerfile

      FROM ubuntu
      CMD echo 'action is success'

      docker build .
  • 檢視
    • docker image ls -f dangling=true
    • 命令結果
    • 刪除
    • docker image prune