1. 程式人生 > 其它 >Dockfile自定義映象

Dockfile自定義映象

初識Dockerfile

Dockerfile 就是來構建docker映象的構建檔案!命令指令碼!

通過這個指令碼就可以生成映象,映象是一層一層的,指令碼也是一個個的命令,每一個命令代表一層!

構建過程

  1. 每個保留關鍵字(指令)都必須是大寫字母
  2. 執行從上到下順序執行
  3. 每一個指令都會提交建立一個新的映象層並提交

指令

指令 說明
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映象

  1. 準備Tomcat壓縮包、jdk壓縮包

jdk-8u11-linux-x64.tar.gz
apache-tomcat-9.0.54.tar.gz

  1. 編寫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

  1. 構建映象
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

  1. 測試
docker exec -it f8cbc4531cb7 /bin/bash 
# 檢視發現啟動失敗
docker ps -a 
docker logs d2680fcae466