Docker-指令字運用案例

Base鏡像(scratch)

Docker Hub 中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構建出來的

自定義一個centos鏡像

# 要求:
# 1、修改默認目錄
# 2、默認安裝vim 和 ifconfig
# 用到的指令字:FROM \ MAINTAINER \ ENV \ WORKDIR \ RUN \ EXPOSE \ CMD \
# 開始新建一個文件
vi Dockerfile02

FROM centos
MAINTAINER zp

ENV MYPATH /usr/local

WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "success------------ok"
CMD /bin/bash

# 保存,開始生成
docker build -f /mydocker/Dockerfile02 -t zzz/centos:1.4 .
# 生成完畢,運行
docker run -it zzz/centos:1.4 /bin/bash/
# 驗證vim 和ifconfig 是否安裝成功,pwd 查看默認目錄是不是/usr/local

# 查看鏡像變更記錄,會列出鏡像創建時安裝等一些信息
docker history zzz/centos:1.4

 

# CMD \ ENTRYPOINT
# 都是指定一個容器啓動時要運行的命令
# Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被 docker run 之後的參數替換
# ENTRYPOINT 不會替換會被當做參數傳遞,形成新的命令組合,進行追加
# build 生成下面的鏡像
FROM centos
RUN yum -y install curl
CMD ["curl","-s","https://ip.cn"]

# docker run運行鏡像會獲取到地址,docker run myip -i後面追加參數會報錯,因爲參數會覆蓋cmd命令
# CMD ["curl","-s","https://ip.cn"]
# 改爲:ENTRYPOINT ["curl","-s","https://ip.cn"] 重新生成
# 這次再執行 docker run myip2 -i 就會正常展示頭信息和IP地址信息

# CMD 是後面的覆蓋前面的,ENTRYPOINT 是追加
# 如果同時存在
# 例如:
FROM centos
CMD ["echo","/usr/local"]
ENTRYPOINT ["echo","/usr"]
# build運行後顯示
/usr echo /usr/local
# 但是當追加參數後
docker run test3 ee
/usr ee

# 當CMD 和 ENTRYPOINT 調換位置重新生成鏡像
FROM centos
ENTRYPOINT ["echo","/usr"]
CMD ["echo","/usr/local"]
# build運行後顯示
/usr echo /usr/local
# 追加參數後顯示
docker run test4 ee
/usr ee

# 測試後發現 CMD 變成了ENTORYPOINT 的追加參數,並且run 後面的參數會覆蓋CMD 
# ONBUILD
# 被繼承時觸發
# 編輯Dockerfile文件
FROM centos
RUN yum -y install curl
ENTRYPOINT ["curl","-s","https://ip.cn"]
ONBUILD RUN echo "jiji-----------"

# build編譯
docker build -f /mydocker/Dockerfile -t test .

# 再次編輯一個Dockerfile文件
# 此時繼承的不在是CentOS了,而是剛纔build 的test
FROM test
RUN yum -y install curl
ENTRYPOINT ["curl","-s","https://ip.cn"]

# build編譯
docker build -f /mydocker/Dockerfile2 -t test2 .

# 編譯時在控制檯就會打印
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM test
# Executing 1 build trigger
 ---> Running in 7125043ade8a
jiji-----------
Removing intermediate container 7125043ade8a

自定義tomcat

# 官網下載:apache-tomcat-9.0.30.tar.gz
# 官網下載:jdk-8u171-linux-x64.tar.gz

# vi編輯Dockerfile

FROM centos
MAINTAINER zp
#把宿主機當前上下文的c.txt拷貝到/usr/local/路徑下
COPY c.txt /usr/local/cincontainer.txt
#把tomcat和jdk添加到容器中
ADD apache-tomcat-9.0.30.tar.gz /usr/local
ADD jdk-8u171-linux-x64.tar.gz /usr/local
#安裝vim編輯器
RUN yum -y install vim
#設置工作訪問時的WORKDIR路徑,登錄落腳點
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置tomcat和jdk環境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.30
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.30
ENV PATH $PATH;$JAVA_HOME/bin;$CATALINA_HOME/lib;$CATALINA_HOME/bin
#容器運行時監聽端口
EXPOSE 8080
#啓動時運行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.30/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.30/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.30/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.30/logs/catalina.out

# 保存build鏡像(ps:鏡像名稱不允許包含大寫字母)
docker build -f /zp/mydocker/tomcat9/Dockerfile -t zptomcat9:1.2 .

# 後臺運行(可以把 卷 信息加入到鏡像中)
docker run -d -p 7777:8080 -v /zp/mydocker/tomcat9/webapps/test:/usr/local/apache-tomcat-9.0.30/webapps/test -v /zp/mydocker/tomcat9/logs:/usr/local/apache-tomcat-9.0.30/logs zptomcat9:1.2

# 查看本地日誌以及通過7777訪問,驗證是否正常

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章