前言:
在上一篇文章 《 Dockerfile实战二之CMD与ENTRYPOINT 》中,对CMD和ENTRYPOINT进行了深入的认识,本篇将完成一个综合的示例,通过本篇的综合示例,将覆盖所有 DockerFile 指令,并学会各个指令的使用。
Dockerfile实战三Dockerfile指令的综合实战
1、本篇将更具实际需求应用到 Dockerfile 系列指令,并构建一个完整的web应用运行时运行环境,在实操之前先来认识哈 Dockerfile 的常用指令:
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置 |
CMD | 指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换 |
EXPOSE | 当前容器对外暴露出的端口 |
ENV | 用来在构建镜像过程中设置环境变量 |
ENTRYPOINT | 指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数 |
FROM | 基础镜像,当前新镜像是基于哪个镜像的 |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
ONBUILD | 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发 |
RUN | 容器构建时需要运行的命令 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
WORKDIR | 指定在创建容器后,终端默认登陆的进来工作目录,一个落入的基本目录 |
2、新建一个tomcat目录,由于存放编写的Dockerfile脚本儿文件,和所需的软件包,输入命令 “ mkdir -p /opt/docker/tomcat ”,并在该命令下模拟一个数据文件 tomcat_data.db,
输入命令 “ echo "There are some data of the web container " > tomcat_data.db,如下图:
3、下载web项目运行时环境所需要的安装包,jdk 使用 jdk-8u151-linux-x64.tar.gz,tomcat 使用 apache-tomcat-9.0.12.tar.gz(文件已上传到CSDN,欢迎下载!),下载完成后上传到该目录下,如下图:
4、新建Dockerfile脚本儿文件,输入命令 “ vi dockerfilebytomcat ” ,并键入如下内容
# 要使用的base基础镜像
FROM centos
# 作者
MAINTAINER alibaba_huazai
# 将模拟数据拷贝到容器/opt/data路径下
COPY tomcat_data.db /opt/b2c_data.db
# 将java与tomcat添加到容器中
ADD jdk-8u151-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.12.tar.gz /usr/local/
# 安装netstat,用于检测端口监听情况
RUN yum -y install net-tools
# 设置登录时落入目录
ENV CDPATH /usr/local
WORKDIR $CDPATH
# 配置java环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 配置tomcat环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.12
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.12
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 暴露容器运行时的端口,以正常提供服务
EXPOSE 8080
# 启动Tomcat,并打印日志信息
CMD echo "building---------------------------sucessfully"
CMD /usr/local/apache-tomcat-9.0.12/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.12/logs/catalina.out
如下图:
*注:关于启动Tomcat服务器,还可以使用如下方式:
# 使用 ENTRYPOINT 指令启动
ENTRYPOINT ["/opt/tomcat/tomcat/bin/startup.sh" ]
# 使用 CMD 的另一种启动方式
CMD ["/opt/tomcat/tomcat/bin/catalina.sh","run"]
5、构建并生成一个新的镜像文件,输入命令 “ docker build -f /opt/docker/tomcat/dockerfilebytomcat -t huazai/web/runtime/tomcat:v1.0 . ” 进行构建(在构建的过程中会出现一些警告,不用理会!),构建成功后会获得一个全新的镜像文件,如下图:
6、运行web环境,
输入命令 “ docker run -it -d -p 8082:8080 --name tomcat01 -v /opt/tomcat/b2c:/usr/local/apache-tomcat-9.0.12/webapps/b2c -v /opt/tomcat/b2c/logs/:/usr/local/apache-tomcat-9.0.12/logs --privileged=true 镜像ID ”,启动成功后,如下图:
*注:在挂载目录后多加一个 --privileged=true 参数,主要为了避免 Docker 挂载宿主机目录时,Docker访问出现 cannot open directory .: Permission denied 的问题。
7、测试tomcat是否能正常访问
任意开启一个浏览器,在地址栏输入 “ IP地址:服务器端口号 ”,访问查看,如果能正常访问,则说明正常的,如下图:
8、测试项目能否正常的发布,结合前述的容器卷将测试的web服务发布到 b2c 目录中,
第一步:在b2c目录中新建 WEB-INF 目录,并新增配置文件 web.xml ,内容如下:
b2c
index.jsp
第二步:新增一个测试的首页,并命名为 index.jsp ,内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
b2c project
Welcome to browse this b2c project ! ! !
Please refresh this page ,
And then look at the logs!
<%
Long tempDate = System.currentTimeMillis();
%>
<%
System.out.println("=============================: " + tempDate);
%>
项目发布完成后,通过容器卷的特点,会传递共享到对应的容器卷目录下,新增完成后,宿主机目录接口如下图:
第三步:浏览项目,在浏览器地址栏输入“ IP:端口/项目访问路径” ,每次刷新页面,后台都会模拟产生一条日志信息,如下图:
第四步:查看日志信息,进入到挂载的日志目录下,输入命令 “ tail -f catalina.out ” ,如下图:
结束语
好了,关于Dockerfile的相关内容就告一段落了,其中完成了从理论到初步认识,从初步认识到综合实战,基本上覆盖了Dockerfile的所有指令的应用及作用,下面将完成几个常用的实例安装教程。
好了,关于 Docker系列(十八)——Dockerfile实战三Dockerfile指令的综合实战 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | [email protected] |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/84580662 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |