#### Base镜像(scratch)
Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。可以把它理解为Java中的Object类;
#### 自定义镜像CentOS
1. 编写Dockerfile
阿里云pull的镜像默认不支持ifconfig,vim等命令
![](https://img.kancloud.cn/3c/b6/3cb64a1274615e810fefcc9d3b14afff_566x129.png)
目的:自定义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 .
![](https://img.kancloud.cn/7b/90/7b905de19744ccfff7248be7a1a4b12e_1267x728.png)
docker images命令查看生成的本地镜像,发现我们自定义的镜像已经在本地镜像列表中了
![](https://img.kancloud.cn/ff/c0/ffc0d00b41be57227a8d4dc7e9a01de3_1087x170.png)
1. 运行镜像
![](https://img.kancloud.cn/9a/f9/9af9e629a7dfa2517c8e1acab3b4e1a0_979x588.png)
可以看到默认的工作路径在/usr/local目录下,vim编辑器也有了,ifconfig也可以正常执行了
1. 列出镜像的变更历史
语法:docker history 镜像名称或镜像ID
![](https://img.kancloud.cn/8a/49/8a4974e7d3546c27aba6367c87be2d7e_1180x415.png)
#### CMD/ENTRYPOINT镜像案例
共同点:都是指定一个容器启动时要运行的命令
##### CMD
- Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。
![](https://img.kancloud.cn/b0/8b/b08bbdf5de88fab99fd73830b144306d_1180x494.png)
正常的情况下,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 .
![](https://img.kancloud.cn/b6/25/b625cadedcd0b87562dcebde3b236f49_1227x638.png)
1. 运行结果
![](https://img.kancloud.cn/75/2e/752e71c80568233bd8df4851ab0a5e48_999x63.png)
1. 问题
但此时,如果想要追加参数内容,就会报错
![](https://img.kancloud.cn/07/6e/076ef8755f58efc05fa0f8317436978d_1885x97.png)
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="\]
- 运行效果
![](https://img.kancloud.cn/b5/17/b5177248d81b504f2208ffd9fbbe45df_1629x402.png)
#### 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. 构建该镜像
![](https://img.kancloud.cn/d3/54/d354bbe50d44e4d01305594c68c1eee8_1199x493.png)
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指令
![](https://img.kancloud.cn/f6/e9/f6e9c79432e3081d30ae0aec59afee11_1415x661.png)
此时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镜像
![](https://img.kancloud.cn/4d/4c/4d4c3430ccfffc159c9659bb3b1b6cf1_1893x765.png)
![](https://img.kancloud.cn/d2/fe/d2fe77e6e70a81a39f09c0ac267ec9ef_1065x92.png)
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案例