建立 tomcat-app1 和 tomcat-app2 两个目录,表示基于 tomcat 自定义基础镜像构建出不一样业务的 tomcat 应用镜像。这个时候咱们就由普通用户来启动tomcat。而且咱们使用命令类来启动tomcat(tail -f这样启动的容器就不会受tomcat 的影响)java
一、准备tomcat容器的默认显示web页面web
1)进入到/opt/dockerfile/web/tomcat/目录下分别建立两个不一样的tomcat应用目录一个是app一、app2,这样作的好处事好部署后期不一样的业务而后直接基于tomcat的基础镜像便可docker
[21:29:12 root@docker ~]#cd /opt/dockerfile/web/tomcat/ [21:29:20 root@docker tomcat]#mkdir tomcat-app{1,2}
2)而后tomcat的压缩包上传上来,由于等会要基于tomcat的server.xml文件修改他的默认web显示页面apache
#已经上传至服务器 [21:31:11 root@docker tomcat]#ls apache-tomcat-9.0.37.tar.gz apache-tomcat-9.0.37.tar.gz
3)解压tomcat压缩包vim
[21:31:15 root@docker tomcat]#tar xf apache-tomcat-9.0.37.tar.gz
4)而后再将如今解压好的server.xml文件拷贝到/opt/dockerfile/web/tomcat/tomcat-app1目录下,这个server.xml文件决定了容器的tomcat启动以后再什么地方去找web显示页面文件浏览器
[21:33:43 root@docker tomcat]#cp apache-tomcat-9.0.37/conf/server.xml /opt/dockerfile/web/tomcat/tomcat-app1/
5)修改server.xml文件,修改它默认的web显示页面的目录,咱们这是将他的web显示页面修改成tomcat
#在这个配置文件中找到 appBase 这一行修改他的web根目录为/data/tomcat/webapps [21:33:44 root@docker tomcat]#vim /opt/dockerfile/web/tomcat/tomcat-app1/server.xml <Host name="localhost" appBase="/data/tomcat/webapps" unpackWARs="true" autoDeploy="true">
6)准备自定义web页面,等会好将这个目录下的web页面解压到tomcat容器中的/data/tomcat/webapps中,之后再公司中将WEBserver目录替换成公司的数据目录便可bash
[21:38:38 root@docker tomcat]#cd /opt/dockerfile/web/tomcat/tomcat-app1 [21:38:54 root@docker tomcat-app1]#mkdir WEBserver
7)WEBserver目录,并建立一个index.jsp,好作以区别app1和app2应用的web页面服务器
[21:39:01 root@docker tomcat-app1]#cd WEBserver/ [21:39:55 root@docker WEBserver]#vim index.jsp zhangguiyuan tomcat-app1 APP1
8)再将这个WEBserver文件夹打包,由于等会在dockerfiel中要让ADD参数解压到tomcat容器去,而且打包的时候有个小注意,就是咱们是否包含WEBserver这个目录,若是一开始包含的WEBserver这个目录的话,就决定了tomcat访问的方式,是否添加WEBserver的URL。因此包括了就要一直包括,因此到了公司中必定要和开发商量好。千万不要来回变app
咱们这里是不包含这个WEBserver这个目录
[21:43:44 root@docker WEBserver]#tar czfv WEBserver.tar.gz ./* ./index.jsp
9) 将WEBserver.tar.gz拷贝到/opt/dockerfile/web/tomcat/tomcat-app1目录中,等会好添加到dockerfile文件中
[21:44:36 root@docker WEBserver]#cp WEBserver.tar.gz /opt/dockerfile/web/tomcat/tomcat-app1/ #验证已经将WEBserver.tar.gz压缩包拷贝过来 [21:45:52 root@docker WEBserver]#ll /opt/dockerfile/web/tomcat/tomcat-app1/WEBserver.tar.gz -rw-r--r-- 1 root root 158 Jul 31 21:45 /opt/dockerfile/web/tomcat/tomcat-app1/WEBserver.tar.gz
二、准备app1业务镜像Dockerfile文件
[23:07:54 root@docker WEBserver]#cd /opt/dockerfile/web/tomcat/tomcat-app1/ [21:52:03 root@docker tomcat-app1]#vim /opt/dockerfile/web/tomcat/tomcat-app1/Dockerfile #tomcat app1业务镜像 #注释:基于tomcat-base:9.0.37镜像 FROM tomcat-base:v9.0.37 #添加server.xml文件修改默认的tomcat,web显示页面 ADD server.xml /apps/tomcat/conf/server.xml #将咱们的web页面压缩包WEBserver.tar.gz打进容器中 ADD WEBserver.tar.gz /data/tomcat/webapps/WEBserver #给www用受权/data/tomcat/ 的权限,咱们须要调用这个目录的index.jsp网页文件 RUN chown www.www /data/tomcat/ -R #给www用户受权/apps下的tomcat目录权限,咱们须要www用户来启动tomcat服务 RUN chown www.www /apps/tomcat -R #给www用户受权/apps下的apache-tomcat-9.0.37目录权限,由于他是一个软链接 RUN chown www.www /apps/apache-tomcat-9.0.37/ -R #暴露端口咱们须要这两个端口 EXPOSE 8080 8443
三、编辑tomcat 业务1的构建脚本
[22:12:21 root@docker tomcat-app1]#vim build-command.sh #!/bin/bash docker build -t tomcat-web:app1 . docker build: #经过docker build 命令制做镜像 -t: #指定新镜像名 tomcat-web:app1: #新镜像名 . #dockerfile文件在当前目录下
四、执行构建脚本,开始制做镜像
#执行制做脚本 [22:14:16 root@docker tomcat-app1]#bash build-command.sh #提示成功镜像制做完成 Successfully built 2a57fce6c5d6 #tomcat-web:app1镜像制做完成 [22:14:28 root@docker tomcat-app1]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-web app1 2a57fce6c5d6 About a minute ago 899 MB
五、启动tomcat-web:app1容器
[23:08:57 root@docker tomcat-app1]#docker run -it -d -p 8080:8080 --name tomcat-web tomcat-web:app1 bash docker run: #启动容器 -it: #在容器中执行命令 -d: #放到后台运行 -p 8080:8080: #容器8080端口映射到宿主机8080端口 --name tomcat-web: #容器名为tomcat-web tomcat-web:app1: #经过tomcat-web:app1镜像启动 bash: #执行命令
六、进入容器经过www普通用户启动tomcat服务
#经过bash进入tomcat-web容器 [23:09:18 root@docker tomcat-app1]#docker exec -it tomcat-web bash #进入容器以后切换www普通用户 [root@d6444260fcac /]# su www #经过www用去启动tomcat [www@d6444260fcac /]$ /apps/tomcat/bin/catalina.sh start #最后退出容器
七、浏览器访问检测
http://10.0.0.117:8080/WEBserver/
浏览器访问测试,得出的结果正好是咱们自定义web界面的结果,再工做中无非将代码换成公司的代码便可
一、拷贝dockerfile镜像制做文件以及所需文件
制做第二个 tomcat 服务镜像。作的二个业务镜像的时候就不用这么复杂了,而是直接将tomcat-app1的目录拷贝到tomcat-app2便可,由于他们所需的文件都差很少
#回到父目录也就是tomcat目录下 [12:36:24 root@docker tomcat-app1]#cd .. #而后将app1 中的全部内容拷贝到tomcat-app2下 [12:36:29 root@docker tomcat]#cp -r tomcat-app1/* tomcat-app2/
二、修改app2 的web页面
进入tomcat-app2目录下只需修改index.jsp 便可,由于app2这个业务也是基于 tomcat-basev9.0.37 的基础镜像来制做。和app1的制做过程同样
#进入app2业务目录 [12:40:59 root@docker tomcat]#cd tomcat-app2/ #编写web显示页面 [13:07:12 root@docker tomcat-app2]#vim WEBserver/index.jsp app2 tomcat-app2 APP2 22222
三、打包app2 业务的web页面压缩包
#删除从APP1 业务目录拷贝过来的web压缩包 [12:42:26 root@docker tomcat-app2]#rm -fr WEBserver.tar.gz #进入到app2的web页面目录下 [12:43:59 root@docker tomcat-app2]#cd WEBserver/ #打包APP2 web页面压缩包 [12:46:06 root@docker WEBserver]#tar cvzf WEBserver.tar.gz ./* #将WEBserver.tar.gz压缩移动到 app2业务目录下 [12:47:10 root@docker WEBserver]#mv WEBserver.tar.gz ../
四、修改构建脚本,区分app2业务的镜像名
咱们的dockerfile文件其实已经不用动了,由于多个tomcat业务都是共用tomact的基础镜像。因此只需修改构建脚本便可,将其新的镜像名改成 app2。
#回到父目录 [12:47:17 root@docker WEBserver]#cd ../ #修改镜像构建脚本 [12:47:26 root@docker tomcat-app2]#vim build-command.sh docker build -t tomcat-web:app2 . docker build: #制做镜像 -t: #给镜像作一个新名字 tomcat-web:app2: #新镜像名为 app2业务 . #dockerfile在当前目录下
五、执行构建镜像脚本,制做新镜像
#运行脚本 [12:51:34 root@docker tomcat-app2]#bash build-command.sh Successfully built 43a79b360480 #制做成功 #经过查看新镜像已制做完成 [12:51:44 root@docker tomcat-app2]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-web app2 43a79b360480 33 seconds ago 914 MB
六、启动app2容器
#启动容器 [12:52:16 root@docker tomcat-app2]#docker run -it --name tomcat-app2 -p 8081:8080 -d tomcat-web:app2 bash docker run: #运行容器 -it: #对容器执行命令 --name tomcat-app2: #容器名为tomcat-app2 -p 8081:8080: #将容器的8080端口映射到宿主机的8081端口上 -d #放到后台运行 tomcat-web:app2: #使用tomcat-web:app2镜像 bash: #执行bash命令 #进入容器 [13:10:09 root@docker tomcat-app2]#docker exec -it tomcat-app2 bash #切换为www用户 [root@9f78526048af /]# su www #经过www用户来启动tomcat [www@9f78526048af /]$ /apps/tomcat/bin/catalina.sh start #最后退出容器回到宿主机
七、经过浏览器访问检测
http://10.0.0.117:8081/WEBserver/
5.4.3.1.6 修改tomcat容器的启动日志存放到/data/目录下
#进入tomcat-app2容器 [13:11:25 root@docker tomcat-app2]#docker exec -it tomcat-app2 bash #编辑tomcat的日志配置文件 [root@9f78526048af /]# vim /apps/tomcat/conf/logging.properties #找到这一行就该tomcat日志存放路径 1catalina.org.apache.juli.AsyncFileHandler.directory = /data/tomcat/logs #建立/data/tomcat/logs文件用来存放tomcat日志 [root@9f78526048af /]# mkdir /data/tomcat/logs #给www普通用户受权 [root@9f78526048af /]# chown www.www /data/tomcat/logs/ -R #使用www用户重启tomcat服务使其配置文件生效 [root@9f78526048af /]# su - www -c "/apps/tomcat/bin/catalina.sh start" #查看日志存放路径已经有了tomcat日志 [root@9f78526048af /]# ll /data/tomcat/logs/ total 8 -rw-r----- 1 www www 7944 Aug 1 05:24 catalina.2020-08-01.log #若是数tomcat起不来必定会在这个日志中打出为何起不来
总结:
以上就是针对java服务的镜像构建以及启动方式
更多文章和资料|点击下方文字直达 ↓↓↓
阿里云K8s实战手册
[阿里云CDN排坑指南] ( https://mp.weixin.qq.com/s/te...
ECS运维指南
DevOps实践手册
Hadoop大数据实战手册
Knative云原生应用开发指南
OSS 运维实战手册