Dockerfile
2023-01-04 15:00:34
Dockerfile
1、Dockerfile內容基礎知識
- 每條保留字指令必須為大寫字母,且後面跟隨至少一個引數
- 指令按照從上到下順序執行
- #表示註釋
- 每條指令都會建立一個新的映象層並對映象層進行提交
2、docker執行Dockerfile的大致流程
- docker從基礎映象執行一個容器
- 執行一條指令並對容器進行修改
- 執行類似docker commit的操作提交一個新的映象層
- docker再基於剛提交的映象執行一個新容器
- 執行Dockerfile中的下一條指令直到所有指令執行完成
3、Dockerfile常用保留字指令
- FROM
- 基礎映象,當前映象是基於哪個映象的,指定一個已經存在的映象作為模板,第一條必須是FROM
- MAINTAINER
- RUN
- 構建容器時需要執行的命令
- 兩種格式
- RUN是在docker build時執行
- EXPOSE
- WORKDIR
- 指定在建立容器後,終端預設登陸的進來工作目錄,一個落腳點
- USER
- 指定該映象以什麼樣的使用者去執行,如果都不指定,預設是root
- ENV
- ADD
- 將宿主機目錄下的檔案拷貝進映象且會自動處理URL和解壓tar包
- COPY
- 類似ADD,拷貝檔案和目錄到映象中
- 將從構建上下文目錄中<源路徑>的檔案/目錄複製到新的一層映象內的<目標路徑>位置
- COPY src dest
- COPY ["src","dest"]
- <src源路徑>:原始檔或者源目錄
- <dest目標路徑>:容器內的指定路徑,該路徑不用事先建好,路徑不存在的話,會自動建立
- VOLUME
- CMD
- 指定容器啟動後要乾的事
- 注意
- Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run 之後的引數替換
- 參考官網Tomcat的Dockerfile演示講解
- 他和前面RUN命令的區別
- CMD是在docker run時執行
- RUN是在docker build 時執行
- ENTRYPOINT
- 也是用於指定一個容器啟動時要執行的命令
- 類似於CMD指令,但是ENTRYPOINT不會被docker run後面的指令覆蓋,而且這些命令列引數會被當做引數送給ENTRYPOINT指令指定的程式
4、編寫一個具備vim+ifconfig+jdk8的Centos7映象
- 去官網下載jdk-8u351-linux-x64.tar.gz
- 將下載的jdk-8u351-linux-x64.tar.gz傳到自己建立的/myfile資料夾中
- 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
- 構建
- docker build -t 新映象名字:TAG .
- 注意TAG後面有個空格,空格後面有個點
- 執行
- 虛懸映象
- 是什麼
- 倉庫名、標籤都是的映象,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