#### 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案例
