专栏首页Java开发必知必会Docker--创建tomcat+JDK镜像并发布web项目实例

Docker--创建tomcat+JDK镜像并发布web项目实例

1:创建Dockerfile文件,用于构建镜像

  • 如果你还不知道Dockerfile如何创建,请移步我的另一篇博客:https://blog.csdn.net/CSDN___LYY/article/details/83061188
  • 注意点:
    • dockerfile中的路径统一
    • 这里使用的版本较低(被容器化的项目使用的比较旧),如需使用其他版本的jdk或者tomcat,找到相应的url替换对应http位置即可
    • 我的项目的数据库使用的是远程数据库,所以没有在镜像中加入数据库的构建,还是直接使用的远程数据库
  • Dockerfile文件如下:
#使用的基础镜像
FROM centos  
#不指定版本tag,则默认pull最新的

#创建者信息
MAINTAINER <liyangyang> <test@163.com>

#安装wget
RUN yum install -y wget

#安装JDK
RUN mkdir /var/tmp/jdk  \
	&& wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" -P /var/tmp/jdk  http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz   \
	&& tar -zxf /var/tmp/jdk/jdk-8u181-linux-x64.tar.gz -C /var/tmp/jdk \
	&& rm -rf /var/tmp/jdk/jdk-8u111-linux-x64.tar.gz   

#配置JDK环境变量
ENV JAVA_HOME /var/tmp/jdk/jdk1.8.0_181
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin

#安装Tomcat
RUN mkdir /var/tmp/tomcat \  
	 && wget -P  /var/tmp/tomcat http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.91/bin/apache-tomcat-7.0.91.tar.gz \
	 && tar -xzf /var/tmp/tomcat/apache-tomcat-7.0.91.tar.gz -C /var/tmp/tomcat  \
	 && rm -rf /var/tmp/tomcat/apache-tomcat-7.0.91.tar.gz

#配置Tomcat环境变量
ENV CATALINA_HOME /var/tmp/tomcat/apache-tomcat-7.0.91

#指定容器暴露端口
EXPOSE 8080

#添加项目 
ADD xcar-index-web.war /var/tmp/tomcat/apache-tomcat-7.0.91/webapps/ 

#创建容器时默认启动tomcat
CMD ["/var/tmp/tomcat/apache-tomcat-7.0.91/bin/catalina.sh", "run"]

2:使用Dockerfile构建镜像

  • 准备工作:
    • 新建一个文件夹docker_file(最好将dockerfile放在一个新的文件夹中,具体原因请看 文首url指向的博文) 。
    • 将创建的Dockerfile文件放在该文件夹中,Dockerfile的文件名最好是“Dockerfile”,这样会默认查找到该文件,不用再进行指定文件。
    • 在docker_file文件夹中放入你的web项目的war包。
    • 最后该文件夹内容应该是如下图所示:
  • 使用build命令构建镜像
docker build -t xcardata/centos:v1.0 . 
#或者后台执行: 
nohup docker build -t xcardata/centos:v1.0 .  > ./build.log 2>&1 & 

####该命令介绍:
# docker build : 创建镜像
# -t  : 设置镜像的名称和tag
# xcardata/centos:v1.0  :  “/”前面的为镜像名称,后面的为镜像的tag
# .   : 这是表示Dockerfile文件在当前的上下文中

####注意:
# 在下载jdk的时候速度可能特别慢。。。。。
  • 构建成功标志:最后出现“Successfully built 5fa2e6db348b”即可,“5fa2e6db348b”是镜像的唯一ID,不同镜像ID也不同

3:使用镜像构建容器并启动

  • 使用run命令构建:
docker run -d -p 8080:8080 newxcardata/centos:v1.0  

####参数介绍:
# docker run : 创建并启动一个容器
# -d : 在后台运行该容器
# -p 8080:8080 : 指定映射端口,<本机端口>:<容器端口>,将容器的8080端口映射到本机的8080端口上,这样我们直接访问本机的8080即可访问到容器的8080端口
# newxcardata/centos:v1.0  : 指定使用镜像的名称和TAG

####执行结束后会返回一个ID,便是容器的唯一ID
  • 查看容器是否启动成功
    • 使用命令:docker ps -a 
    • 查找与返回一致的ID的容器,如果其状态(STATUS)为Up状态 即为启动成功!
    • 如果不知道docker ps得到的结果各个字段的含义,请移步我的另一篇博客:https://blog.csdn.net/CSDN___LYY/article/details/83042553
    • 例如:

4:测试容器

  • 容器启动后有时候容器中的tomcat还没有启动完毕,我们可以通过查看该容器的log来判断tomcat是否启动成功

docker logs 容器ID或者容器name

  • 当我们在确认tomcat启动成功后,在本地测试是否可以访问项目
####在本机的浏览器中输入:
ip:8080/xcar-index-web

####例如:
10.52.10.227:8080/xcar-index-web

####:参数解释:
# ip为你服务器的ip地址,比如我的就是10.52.10.227 
# 8080为我们服务器被容器映射的端口
# /xcar-index-web :代表我们项目名称,也就是你的war包名称
  • 如果可以访问,那么恭喜你容器创建成功了!
  • 如果不可以,就要检查一下容器的logs了,看看是什么原因,具体原因具体解决。有什么问题也可以在此博文下评论,我们一起讨论~~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 云计算,边缘计算和雾计算:了解每个计算的实际应用

    您的运营是建立在您自己的一般云基础设施,还是选择使用雾和边缘计算等更专业的工具,这些都取决于您的业务需求和抱负。

    静一
  • TCGA数据库的肿瘤病人也是有药物反应信息的

    To determine whether cancer cell line based LENP model could predict patient dru...

    生信技能树
  • MySQL巡检建议梳理

    最近在做业务巡检的工作时,对于巡检信息的展示,对于偏后端的我们是不擅长的,所以我们设计一个基本的原型需求,在专业前端团队的帮助下,迭代了一个初版的demo,整体...

    jeanron100
  • 一个模型搞定所有风格转换,直接在浏览器实现(demo+代码)

    用一个模型就能实现所有类型的风格转换!一个名为Arbitrary Image Stylization in the Browser的项目最近火起来。

    新智元
  • MySQL性能扩展的架构优化方案(一)

    这几天有一个业务库的负载比往常高了很多,最直观的印象就是原来的负载最高是100%,现在不是翻了几倍或者指数级增长,而是突然翻了100倍,导致业务后端的数...

    jeanron100
  • 运维平台中的业务树初版设计

    资源服务的一个基本单元是服务器,可以是虚拟机,物理机,也可以是docker等。这是最底层的资源服务。

    jeanron100
  • 全局测表达量定位到感兴趣基因或功能已经成为常规流程

    看到一篇文章提到了这个DESI-MSI分析,可以说目前主流的研究都会引入表达芯片或者mRNA-seq测序来看敲减目标基因或者过表达基因后的效果,但是该文章探索的...

    生信技能树
  • XSS漏洞总结

    同源策略 影响源的因素:host,子域名,端口,协议 a.com通过以下代码:

    张树臣
  • 数据库事务四大特性以及事务的隔离级别

    原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作...

    三哥
  • 梳理博客的启示

    今天下午整理了近一年来的文章情况,发现运维开发的文章比重偏高。在侧重整理这部分的内容时,发现了两个比较突出的问题,首先发现很多运维开发的总结比较零散,侧重的比例...

    jeanron100

扫码关注云+社区

领取腾讯云代金券