Docker系列(十八)——Dockerfile实战三Dockerfile指令的综合实战

                               《 Dockerfile实战三Dockerfile指令的综合实战 》

前言:

在上一篇文章 《 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<who.seek.me@java98k.vip>
# 将模拟数据拷贝到容器/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 ,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>b2c</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

第二步:新增一个测试的首页,并命名为 index.jsp ,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>b2c project</title>
</head>
<body style="text-align: center;">
	<div
		style="margin: 0 auto; width: 600px; height: 400px; border: 2px solid #F00">
		<h1>Welcome to browse this b2c project ! ! !</h1>
		<br> <br>
		<h3>
			Please refresh this page ,<br /> And then look at the logs!
		</h3>
		<%
			Long tempDate = System.currentTimeMillis();
		%>
		<input type="text" value="<%=tempDate%>" />
		<%
			System.out.println("=============================: " + tempDate);
		%>
	</div>
</body>
</html>

项目发布完成后,通过容器卷的特点,会传递共享到对应的容器卷目录下,新增完成后,宿主机目录接口如下图:

 

第三步:浏览项目,在浏览器地址栏输入“ IP:端口/项目访问路径” ,每次刷新页面,后台都会模拟产生一条日志信息,如下图:

 

第四步:查看日志信息,进入到挂载的日志目录下,输入命令 “ tail -f catalina.out ” ,如下图:

 

结束语

好了,关于Dockerfile的相关内容就告一段落了,其中完成了从理论到初步认识,从初步认识到综合实战,基本上覆盖了Dockerfile的所有指令的应用及作用,下面将完成几个常用的实例安装教程。

 

 

 


 好了,关于 Docker系列(十八)——Dockerfile实战三Dockerfile指令的综合实战 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:CSDN (Chinese Software Developer Network)
原        文:https://blog.csdn.net/Hello_World_QWP/article/details/84580662
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值