安装tomcat需要jdk,所以需要准备两个安装包:jdk和tomcat
关于jdk和tomcat的版本兼容问题,需要参考https://hub.docker.com/_/tomcat 中的Supported tags,这里使用jdk8和tomcat8.5.63
1.下载这两个安装包
- apache-tomcat-8.5.63.tar.gz,下载地址:https://tomcat.apache.org/download-80.cgi
- jdk-8u281-linux-x64.tar.gz,下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2. 创建宿主机上下文的目录,此目录将会是存放Dockerfile的目录,同时将docker build过程中需要拷贝到镜像的文件也放到此目录:
mkdir -p /nick/mydockerfile/tomcat8
Dockerfile如下:
构建镜像nicktomcat8:docker build -t nicktomcat8 . (不加 -f 参数指定dockerfile的文件名时,将默认寻找当前路径下的Dockerfile文件)
docker run -it -p 8888:8080 nicktomcat8
浏览器测试,访问 xxx.xxx.xxx.xxx:8888
tomcat版本正确,测试成功。
再查看容器内文件:
登录后的工作目录为/usr/local,宿主机上下文中的nick.txt已拷贝至容器并重命名,两个安装包已拷贝至容器并解压。
说明:
第一个容器卷是对应tomcat容器中的web项目文件夹,方便发布。
第二个容器卷是对应tomcat容器中的日志文件夹,方便跟踪日志。
--privileged=true,使用该参数,container内的root拥有真正的root权限,为了避免在容器内操作时遇到各种permission denied。
启动后宿主机的上下文目录下就多了test和tomcat8logs两个文件夹:
如上启动容器的时候添加了两个容器卷,其中第一个容器卷对应关联的是tomcat容器webapps下的test工程。
所以只需把代码文件直接放在宿主机的test文件夹中,自动同步至容器内,然后重启容器即可完成发布(这里tomcat可以不重启)。
编写一个abc.jsp和WEB-INF/web.xml放入宿主机的test路径下:
abc.jsp
WEB-INF/web.xml
查看容器,验证jsp和xml页面是否已同步
在浏览器验证:
修改宿主机下的abc.jsp,将welcome改为hello,刷新浏览器页面:
同样,第二个容器卷对应关联的是tomcat容器logs下的日志文件,需要查看日志的话,可以直接在宿主机中查询:
访问了两次abc.jsp,所以日志中打印了两次=============docker tomcat self。