Dockfile自定義映象
阿新 • • 發佈:2021-10-26
初識Dockerfile
Dockerfile 就是來構建docker映象的構建檔案!命令指令碼!
通過這個指令碼就可以生成映象,映象是一層一層的,指令碼也是一個個的命令,每一個命令代表一層!
構建過程
- 每個保留關鍵字(指令)都必須是大寫字母
- 執行從上到下順序執行
- 每一個指令都會提交建立一個新的映象層並提交
指令
指令 | 說明 |
---|---|
FROM | 基礎映象 一切從這裡構建 |
MAINTAINER | 映象是誰寫的 姓名+郵箱 |
RUN | 映象構建的時候需要執行的命令 |
ADD | 新增內容 |
WORKDIR | 映象的工作目錄 |
VOLUME | 掛載的目錄 |
EXPOSE | 暴露埠 |
CMD | 指定這個容器啟動的時候執行的命令 CMD只有最後一個會生效,可以被替代 |
ENTRYPOINT | 指定這個容器啟動的時候執行的命令 可以追加命令 |
ONBUILD | 當構建一個被繼承的Dockerfile , 這個時候就會執行ONBUILD指令 |
COPY | 類似ADD ,將我們檔案拷貝到映象中 |
ENV | 構建的時候設定環境變數 |
實戰測試
官方Centos構建指令:https://github.com/CentOS/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile
建立一個自己的centos
cd /home
mkdir dockerfile
vim mydockerfile_centos
cat mydockerfile_centos
dockerfile檔案內容
FROM centos
MAINTAINER mpy<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end----"
CMD /bin/bash
通過檔案構建映象
# -f 代表檔案路徑 -t 映象名和版本號
docker build -f mydockerfile_centos -t mycentos:0.1 .
# 檢視映象是否構建成功
docker images
docker run -it mycentos:0.1
# 檢視映象的構建過程
docker history 6c38062cecb7
我們平時拿到一個映象通過docker history
命令 可以看看他是怎麼構建的。
CMD和ENTRYPOINT的區別
CMD測試
# 編寫dockerfile檔案
vim dockerfile-cmd-test
# 檔案內容
FROM centos
CMD ["ls","-a"]
# 執行之後 發現ls -a命令生效
docker build -f dockerfile-cmd-test -t mytest .
docker run mytest
# 追加命令 ls -al 但是發現報錯 命令被替換為 -l 但是-l 不是命令所以報錯
docker run mytest -l
ENTORYPOINT 測試
# 編寫dockerfile檔案
vim dockerfile-cmd-test2
# 檔案內容
FROM centos
ENTORYPOINT ["ls","-a"]
# 執行之後 發現ls -a命令生效
docker build -f dockerfile-cmd-test2 -t mytest2 .
docker run mytest2
# 追加命令 ls -al 正確輸出
docker run mytest -l
實戰:TOMCAT映象
- 準備Tomcat壓縮包、jdk壓縮包
jdk-8u11-linux-x64.tar.gz
apache-tomcat-9.0.54.tar.gz
- 編寫dockerfile,官方命令
Dockerfile
,build
會自動尋找這個檔案,就不需要-f
指定
touch readme.txt
vim Dockerfile
FROM centos
MAINTAINER mpy<[email protected]>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.54.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54
ENV CATALINA_PATH /usr/local/apache-tomcat-9.0.54
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.54/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.54/bin/logs/catalina.out
- 構建映象
docker build -t diytomcat .
docker run -d -p 9090:8080 --name mpytomcat -v /Users/docker-study/tomcat/test:/usr/local/apache-tomcat-9.0.54/webapps/test -v /Users/docker-study/tomcat/logs:/usr/local/apache-tomcat-9.0.54/logs diytomcat
- 測試
docker exec -it f8cbc4531cb7 /bin/bash
# 檢視發現啟動失敗
docker ps -a
docker logs d2680fcae466