赞
踩
需要准备tomcat压缩包和jdk的压缩包
官方命名 Dockerfile,build会自动寻找这个文件,就不需要 -f 指定文件名了
FROM centos:7 MAINTAINER wyc<837279588@qq.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u281-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.60.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_281 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.60 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.60 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD $CATALINA_HOME/bin/startup.sh && tail -F $CATALINA_HOME/logs/catalina.out
[root@wyc tomcat]# docker build -t diytomcat .
[root@wyc tomcat]# docker run -d -p 9090:8080 --name wyctomcat -v /home/wyctest/build/tomcat/test:/usr/local/apache-tomcat-9.0.60/webapps/test -v /home/wyctest/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.60/logs diytomcat
[root@wyc tomcat]# docker exec -it 容器id /bin/bash
curl localhost:9090
网络请求是否成功,这里我遇到了两个问题(实际上是一个问题,但根据log能分成两类):
大问题都是 curl: (56) Recv failure: Connection reset by peer,访问失败,连接被重置,但光看句话看不出什么问题来,所以我查看了生成的log。
问题1:无法找到jdk路径
[root@wyc tomcat]# curl localhost:9090
curl: (56) Recv failure: Connection reset by peer
[root@1c299e7ab95c logs]# cat catalina.out
/usr/local/apache-tomcat-10.1.0/bin/catalina.sh: line 466: /usr/local/jdk1.8.0_301/bin/java: No such file or directory
/usr/local/apache-tomcat-10.1.0/bin/catalina.sh: line 466: /usr/local/jdk1.8.0_301/bin/java: No such file or directory
/usr/local/apache-tomcat-10.1.0/bin/catalina.sh: line 466: /usr/local/jdk1.8.0_301/bin/java: No such file or directory
/usr/local/apache-tomcat-10.1.0/bin/catalina.sh: line 466: /usr/local/jdk1.8.0_301/bin/java: No such file or directory
遇到如上问题,简单来说是找不到jdk的路径,我出现这个问题的原因是:jdk的压缩包实际上不是压缩包。
jdk的压缩包看似是压缩包,实则不是压缩包。这个很容易发现,可以用 cat jdk-8u301-linux-x64.tar.gz
查看,如果出现前端代码就代表这是个网址而不是压缩包,如果出现乱码,则是压缩包;或者用 ls -l
查看压缩包大小,如果很小则不是压缩包。解决办法是重新去官网找jdk的压缩包。当我解决了问题1后,出现了问题2。
问题2:jdk版本不匹配或jdk版本太高
[root@wyc tomcat]# curl localhost:9090 curl: (56) Recv failure: Connection reset by peer [root@wyc tomcat]# docker logs a23b8ffe533a Tomcat started. at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601) Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:756) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
遇到如上问题,简单来说是jdk版本问题,就我而言有两种出现以上问题的情况:
第一种情况:容器中的jdk版本和linux环境的jdk版本不一致(当时我的容器内的jdk版本是 jdk1.8.0_301,而linux的jdk版本是自带的 jdk1.8.0_262),解决办法就是把linux自带的jdk删除后下载和容器内一致的jdk版本。
第二种情况:jdk版本太高,可以把已有的jdk删除后下载低版本的jdk(但是别忘了容器的jdk版本和linux的jdk版本要一致),我刚开始用的是 jdk1.8.0_301 和 apache-tomcat-10.1.0,发现问题后改成了 jdk1.8.0_281 和 apache-tomcat-9.0.60,实测可以运行。
解决问题后运行 curl localhost:9090
,如下图:
由于做了卷挂载,我们直接在本地test文件夹下编写项目就可以发布了
创建web.xml文件,路径为/tomcat/test/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
创建index.jsp文件,路径为/tomcat/test/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello,WYC!</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("----my test web logs----");
%>
</body>
</html>
1、地址 https://hub.docker.com/ 注册帐号
2、确定这个帐号可以登录
3、在服务器上提交自己的镜像
4、linux上通过命令行登录
docker login --help
查看登录帮助
[root@wyc tomcat]# docker login --help
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username
docker login -u username
登录
root@wyc tomcat]# docker login -u chisatooo
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
5、登录完毕后就可以提交镜像了
docker push
# push镜像出现的问题
[root@wyc tomcat]# docker push chisatooo/diytomcat:1.0
The push refers to repository [docker.io/chisatooo/diytomcat]
An image does not exist locally with the tag: chisatooo/diytomcat
# 增加一个tag即可解决
[root@wyc tomcat]# docker tag 79ddadee54f6 chisatooo/tomcat:1.0
# docker push username:tomcat:tag 尽量带上版本号
root@wyc tomcat]# docker push chisatooo/tomcat:1.0
6、查看docker hub上是否发布成功
发布成功!
1、登录阿里云
2、找到容器镜像服务
3、创建命名空间
4、创建容器镜像
5、浏览阿里云
6、根据阿里云官方步骤发布镜像,发布成功后如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。