docker(2) Dockerfile编写运行tomcat9

前言

上一章介绍了docker的背景,并执行了一个docker镜像,运行了容器,但是容器的镜像是如何实现的呢,简单介绍一下dockerfile。基于tomcat的war发布为例,其他jar部署同理,只是启动的方式差别。为了多使用dockerfile命令,使用ubuntu标准镜像为基镜像。

dockerfile

系统镜像以及容器运行的微系统基本上都是root,所以一般不存在权限问题。

Dockerfile

FROM ubuntu:latest     

#切换镜像目录,进入/opt目录
WORKDIR /opt

#设置时区,创建jdk8目录与tomcat9目录,这是镜像上增加
RUN echo 'Asia/Shanghai' >/etc/timezone && mkdir jdk8 && mkdir tomcat9

#将宿主机的jdk8拷贝到镜像去,也可以使用COPY
ADD jdk1.8.0_251 /opt/jdk8/
#将宿主机的tomcat9拷贝
ADD apache-tomcat-9.0.30 /opt/tomcat9/
#拷贝war
COPY ROOT.war /opt/tomcat9/webapps

#设置环境变量
ENV JAVA_HOME=/opt/jdk8
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH

ENV CATALINA_HOME /opt/tomcat9
ENV PATH $CATALINA_HOME/bin:$PATH

#公开端口
EXPOSE 8080
#设置启动命令
ENTRYPOINT ["/opt/tomcat9/bin/catalina.sh","run","> /opt/tomcat9/logs/catalina.out"]

保存上面的文本命名为Dockerfile,记得首字母大写,拷贝到JDK8 tomcat9的目录

确保在本机上路径与上面的宿主机Dockerfile的路径一致。

时区设置

构建docker镜像第一步要确认时区,不然时间不正确,会对业务,日志等造成极度的影响。首先运行ubuntu镜像,docker exec

发现没有,0区,格林威治时区,显然我不在这。使用

echo ‘Asia/Shanghai’ >/etc/timezone

即可设置好运行的时区,JDK就能识别正常的时区了

RUN指令

RUN指令执行时,注意:每执行RUN指令docker镜像就会加深一层,体积也会增大,所以尽量将多个指令通过 && 连接执行,或者 ; \ 同步执行。笔者这里使用了&&连接符。

其他指令

  1. 上面没有设置JVM参数,是因为JVM参数是变化的,生产测试不一样,不能直接在镜像生成,需要运行时外部传入
  2. 其中ADD其实有特殊含义,在压缩包的ADD时会自动解压,拷贝JDK与tomcat推荐使用,如果拷贝war或者jar推荐使用COPY替代,含义更明确。
  3. EXPOSE是必须的,意思是开放容器的8080端口
  4. ENTRYPOINT是执行指令,可以使用CMD,两者用法略有区别

编译

在cli命令界面执行

docker build . -t tomcat9:v1.0

编译即可生成镜像
在这里插入图片描述
当然docker的镜像这里手工执行的,一般会集成CI CD工具配合K8S管理自动发布管理。

运行

docker run -d --name tomcat9-demo -p 8080:8080 -v ~/logs:/opt/tomcat9/logs tomcat9:v1.0

在这里插入图片描述
访问http://localhost:8080/index.html

总结

dockerfile的文件编写,官方有详细的教程,命令都有详细的说明:官方文档
Dockerfile只是镜像的制作的基础,镜像发布为容器还有很多问题要处理,比如:

  1. 容器日志收集
  2. 容器网络管理
  3. 容器调度
  4. 容器服务架构
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值