1.准备好需要的jdk 和 tomcat

kun@ubuntu:~$ cd tomcat-docker/
kun@ubuntu:~/tomcat-docker$ ll
total
drwxrwxr-x kun kun May : ./
drwx------ kun kun May : ../
-rw-rw-r-- kun kun May : apache-tomcat-8.5..tar
-rw-rw-r-- kun kun May : Dockerfile
-rw-rw-r-- kun kun May : forms.war
drwxr-xr-x kun kun Dec : jdk/
-rw-rw-r-- kun kun May : jdk-8u201-linux-x64.tar.gz
drwxrwxr-x kun kun May : tomcat/

这里我将jdk和tomcat的tar.gz 包都通过 tar -zxvf解压了 并通过mv 修改了文件夹名字为jdk和tomcat

(其实不解压也可以,2中说明为啥我要解压,为啥不用解压而我又先解压了)

2.编写Dockerfile(示例如下)

FROM ubuntu:16.04
MAINTAINER ceshi@qq.com
COPY ./jdk /usr/local/jdk
COPY ./tomcat /tomcat ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
ENV CATALINA_OPTS -Xms128m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=512M
RUN cd /tomcat/logs && echo "" >>count.txt
ENTRYPOINT /tomcat/bin/startup.sh && tail -F /tomcat/logs/catalina.out

根据显示的行号来解释

  1.我们制作镜像的基础,在ubuntu16.04的系统上构建后续操作

   2.维护者信息

  3~5.复制当前目录下的jdk目录 到容器内部的/usr/local/jdk目录下

    解释下:

    Dockerfile提供了COPY 和 ADD 两种方式

    COPY : COPY ./jdk  /usr/local/jdk            #直接原样拷贝过去

    ADD   : ADD ./jdk-8u201-linux-x64.tar.gz  /usr/local/java        #拷贝过去,如果是压缩包还会自动帮着解压,本来是好事,但是解压后文件夹名字一长串,不便于记忆,就直接先解压好重命名好了再COPY过去

7~13.一看就知道了 通过 ENV 来设置各种环境变量

14.为了示例RUN的使用, 通过RUN命令,后面就可以执行各种linux命令

15.表示启动容器后执行的操作

将上述文件保存为Dockerfile  注意大小写,没有后缀,然后进入到该目录,执行命令构建镜像

sudo docker build -t xwg/tomcat:v1 --rm=true .
#如果改变了Dockerfile名字,则需要指定 -f 文件名称
xwg/tomcat:v1 镜像的名字及tag,  最后的点代表当前目录

启动试试看

sudo docker run -p 8899:8080 --name tomcat_xwg xwg/tomcat:v1        

然后问题又来了,容器倒是启动起来了,但是怎么把我们自己的war包丢里面运行起来呢?

sudo docker cp forms.war tomcat_xwg:/usr/local/tomcat/webapps

  forms.war  不解释

  tomcat_xwg:/usr/local/tomcat/webapps  冒号前面为容器名称或者id, 冒号后面为tomcat的webapps全路径

  丢进去就好了,会自动发布的,不需要我们再自己去启动tomcat了,因为容器启动后tomcat就默认启动了  Dockerfile最后一行就是启动tomcat

  丢进去后,控制台就会检测到,并自动部署

查看docker中tomcat日志

使用docker exec进入Docker容器
  除了上面几种做法之外,docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:
  1. $ sudo docker exec --help
 
 
接下来我们使用该命令进入一个已经在运行的容器
    1. $ sudo docker ps
    2. $ sudo docker exec -it 775c7c9ee1e1 /bin/bash

Dockerfile创建tomcat和jdk,并发布java项目的更多相关文章

  1. 项目案例之Pipeline流水线发布JAVA项目(三)

    项目案例之Pipeline流水线发布JAVA项目(三) 链接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取码:z7gj 复制这段内容后打开百度网 ...

  2. Centos 如何 发布Java项目

    在发布Java项目之前,我们先要安装如下软件 一.Windows 1.winscp(Windows到centos上传下载) 2.PuTTY(Windows访问centos服务器) 3.Navicat客 ...

  3. 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目

    jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...

  4. liunx新装tomcat之后,tomcat不能识别新发布的项目

    遇到的问题 在liunx新装tomcat之后,发布之前的项目,发现在tomcat不能识别新发布的项目,打成war包,还是直接把项目拷贝过去都不行. 环境:虚拟机:VMware 主机系统:win10 虚 ...

  5. Centos 7.6搭建Tomcat 环境,发布Java项目

    安装 JDK Tomcat 的安装依赖 JDK,在安装 Tomcat 之前需要先安装 Java JDK.输入命令 java -version,如果显示 JDK 版本,证明已经安装了 JDK java ...

  6. 从零开始部署发布Java项目到服务器的Docker中

    本以为很简单,由于没用过docker和java,本文将会阐述一路遇到的拦路虎. 首先,写好Java项目,本地跑通. 可能会遇到的问题: 1.jar包正常运行,war包404: 如何打包很多教程都有介绍 ...

  7. 【图文】 使用ant编译和发布java项目

        开发JavaEE项目经常会碰到修改代码后,项目没有重新编译的问题.老大给指明了一个解决办法:用ant编译项目. ant是apache基金会下的一个项目,是基于Java语言的构建工具.      ...

  8. Gitlab+Jenkins学习之路(十三)之发布Java项目到tomcat

    一.新建一台虚拟机安装tomcat ()安装JDK 官网下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  9. 15 自动发布Java项目(Tomcat)

    #!/bin/bash export PAHT=/usr/local/maven/bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/ ...

随机推荐

  1. shell习题第26题:监控mysql服务

    [题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从 ...

  2. 通过Kubeadm搭建Kubernetes集群

    历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...

  3. IOS 主队列,全局队列的关系

    同步,异步,串行,并发 同步和异步代表会不会开辟新的线程.串行和并发代表任务执行的方式. 同步串行和同步并发,任务执行的方式是一样的.没有区别,因为没有开辟新的线程,所有的任务都是在一条线程里面执行. ...

  4. tf 2.0

    tf.function和Autograph使用指南-Part 1 "Keras之父发声:TF 2.0 + Keras 深度学习必知的12件事" Effective TensorFl ...

  5. javascript--HTML DOM常用元素对象

    二,Select:访问select元素 属性:.selectedIndex  获取select中当前选中项的下标 .options  获取select中所有的option元素 返回值为数组 .opti ...

  6. 【Distributed】分布式配置中心

    一.概述 1.1 什么是分布式配置中心 常用分布式配置中心框架 二.Apollo阿波罗 2.1 Apollo特点 2.2 Apollo整体架构原理 2.3 Apollo Portol 环境搭建 Lin ...

  7. 查看python和NumPy版本和安装路径

    记录查看Python和NumPy版本以及路径的几条命令 # 查看Python版本及路径 python -V python -c "import sys;print(sys.executabl ...

  8. idou老师教你学Istio 07: 如何用istio实现请求超时管理

    在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...

  9. 用js刷剑指offer(用两个栈实现队列)

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 牛客网链接 js代码 let stack1 = [] let stack2 = [] function ...

  10. 当前form窗体随系统屏幕变化

    private void 新建_Load(object sender, EventArgs e) { int DeskWidth = Screen.PrimaryScreen.WorkingArea. ...