#### Base鏡像(scratch)
Docker Hub中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構建出來的。可以把它理解為Java中的Object類;
#### 自定義鏡像CentOS
1. 編寫Dockerfile
阿里云pull的鏡像默認不支持ifconfig,vim等命令

目的:自定義CentOS鏡像具備以下功能
1 登陸后的默認路徑為/usr/local
2 vim編輯器
3 查看網絡配置命令ifconfig的支持
\# 表示從這個鏡像作為模板
FROM centos
\# 鏡像作者信息
MAINTAINER 自定義Dockerfile的Demo zhao.yang@landasoft.com
CMD echo 功能:自定義構建CentOS的Dockerfile的Demo 作者:zhao.yang@landasoft.com
\# 配置登陸容器后的工作目錄
ENV WORK\_PATH /use/local
WORKDIR $WORK\_PATH
\# 配置文本編輯器vim和ifconfig命令的支持
RUN yum install -y vim \# 使用yum安裝vim
\# 控制臺打印消息信息
CMD echo 文本編輯器vim安裝完成
\# 安裝net-tools(net-tools是ifconfig命令所在的軟件包)
RUN yum install -y net-tools
CMD echo net-tools網絡工具安裝完成
\# 對外暴露80端口
EXPOSE 80
\# 鏡像啟動時,默認執行的命令
CMD /bin/bash
1. 構建
docker build -f customize\_centos7.6 -t gotojava/centos7.6 .

docker images命令查看生成的本地鏡像,發現我們自定義的鏡像已經在本地鏡像列表中了

1. 運行鏡像

可以看到默認的工作路徑在/usr/local目錄下,vim編輯器也有了,ifconfig也可以正常執行了
1. 列出鏡像的變更歷史
語法:docker history 鏡像名稱或鏡像ID

#### CMD/ENTRYPOINT鏡像案例
共同點:都是指定一個容器啟動時要運行的命令
##### CMD
- Dockerfile中可以有多個CMD指令,但只有最后一個生效,CMD會被docker run之后的參數替換。

正常的情況下,tomcat會正常啟動,并且在控制臺打印啟動日志,但是如果在后面加上”ls -l”后,Tomcat最后的cmd命令會被ls -l命令進行替換,最終只會執行ls -l命令,而不會啟動Tomcat。
##### ENTRYPOINT
curl命令:curl命令可以用來自執行下載、發送各種HTTP請求,指定HTTP頭部等操作。
Docker run之后的參數會被當做參數傳遞給ENTRYPOINT,之后會形成新的命令組合
1. 制作CMD版可以查詢IP地址信息的Dockerfile
\# 表示從這個鏡像作為模板
FROM centos
\# 安裝curl下載工具
RUN yum install -y curl
CMD echo curl安裝完成
CMD \["curl","-s","https://ip.cn/?ip="\]
1. 構建Docker容器
docker build -f cmd\_command -t gotojava/query\_ip:1.0 .

1. 運行結果

1. 問題
但此時,如果想要追加參數內容,就會報錯

1. WHY
原因在于:跟在鏡像名后面的是command,運行時會替換Dockerfile中CMD的默認值。
1. 制作ENTRYPOINT版查詢IP信息的容器
- Dockerfile
\# 表示從這個鏡像作為模板
FROM centos
\# 安裝curl下載工具
RUN yum install -y curl
CMD echo curl安裝完成
ENTRYPOINT \["curl","-s","https://ip.cn/?ip="\]
- 運行效果

#### ONBUILD命令案例
1. 編寫Dockerfile文件,并構建該文件鏡像,鏡像名為**gotojava/onbuild**
\# 表示從這個鏡像作為模板
FROM centos
\# 安裝curl下載工具
RUN yum install -y curl
RUN echo curl安裝完成
ENTRYPOINT \["curl","-s","https://ip.cn/?ip="\]
ONBUILD RUN ECHO “鏡像容器被繼承了”
1. 構建該鏡像

1. 編寫一個Dockerfile文件,該Dockerfile繼承于gotojava/onbuild,鏡像名為gotojava/onbuild\_child
\# 表示從這個鏡像作為模板
FROM gotojava/onbuild
\# 安裝curl下載工具
RUN yum install -y curl
RUN echo curl安裝完成
ENTRYPOINT \["curl","-s","https://ip.cn/?ip="\]
1. 構建該鏡像,觸發ONBUILD指令

此時ONBUILD指令被觸發
#### 自定義鏡像Tomcat8
1. 建立tomcat8目錄
mkdir gotojava/tomcat8 -p
1. 創建file.txt文件
touch file.txt
1. 將jdk和tomcat安裝的壓縮包拷貝到創建的目錄中
\[root@izikh2x5epj8p6z tomcat8\]# cp ~/jdk-8u171-linux-x64.tar.gz ~/apache-tomcat-8.5.31.tar.gz .
1. 編寫Dockerfile
FROM centos
\# 作者說明
MAINTAINER ZhaoYang<yz0917@foxmail.com>
\# 把宿主機當前上下文的file.txt拷貝到容器/usr/local路徑下
COPY file.txt /usr/local/fileContainer.txt
\# 把Java與Tomcat添加到容器中(ADD有復制和解壓兩個功能)
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.31.tar.gz /usr/local/
\# 安裝vim編輯器
RUN yum install -y vim
\# 配置工作區默認訪問路徑
ENV WORK\_PATH /usr/local/
WORKDIR $WORK\_PATH
\# 配置Java環境變量
ENV JAVA\_HOME /usr/local/jdk1.8.0\_171/
ENV CLASSPATH $JAVA\_HOME/lib/dt.jar:$JAVA\_HOME/lib/tools.jar
\# 配置Tomcat環境變量
ENV CATALINA\_HOME /usr/local/apache-tomcat-8.5.31/
ENV CATALINA\_BASE /usr/local/apache-tomcat-8.5.31/
\# 將JAVA環境變量和Tomcat環境變量追加到PATH變量中
ENV PATH $PATH:$JAVA\_HOME/bin:$CATALINA\_HOME/lib:$CATALINA\_HOME/bin
\# Tomcat容器對外監聽端口
EXPOSE 8080
\# 啟動時運行tomcat
CMD /usr/local/apache-tomcat-8.5.31/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.31/logs/catalina.out
1. 構建Docker鏡像


1. Run
docker run -p 80:8080 -d gotojava/tomcat8.5
- 什么是Docker
- 為什么會有Docker
- 虛擬技術的發展
- Docker的優勢
- Docker的應用場景(能干什么)
- 獲取Docker及文檔資源
- Docker架構
- Docker工作原理
- 為什么Docker比虛擬機快?
- Docker的安裝
- 前提條件
- 安裝Docker Engine(Docker引擎)
- 程序員的入門經典之HelloWorld
- 卸載Docker引擎
- 配置鏡像加速
- 解決方案:重新加載daemon.json文件后,重啟服務出錯
- Docker常用命令
- 幫助命令
- 鏡像命令
- 常用容器命令
- Docker鏡像
- 鏡像是什么
- 鏡像的特點
- docker commit????// 鏡像提交
- 運行一個Tomcat容器
- Docker容器數據卷
- 什么是容器數據卷
- 數據卷可以干嘛?
- 數據卷的掛載
- 數據卷容器
- Dockerfile
- 什么是Dockerfile
- Dockerfile構建鏡像的流程
- Dockerfile的Demo(CentOS6.8)
- Dockerfile構建過程解析
- Dockerfile體系結構
- Dockerfile案例