ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
#### 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