以GitHub上一个开源JAVA博客应用为例,地址为:https://github.com/b3log/solo。它的项目结构是基于Maven的要求布置的,通过Maven可以编译和构建WAR包。
执行容器化的环境为CentOS7.2。
# yum -y install git maven
# mkdir /opt/java # mkdir /opt/java/demo # cd /opt/java/demo # git clone https://github.com/b3log/solo
#### Server #### # Browser visit protocol serverScheme=http # Browser visit domain name serverHost=192.168.121.133 # Browser visit port, 80 as usual, THIS IS NOT SERVER LISTEN PORT! serverPort=8080 #### Cookie #### cookieName=solo cookieSecret=Beyond #### Runtime Mode #### runtimeMode=DEVELOPMENT #runtimeMode=PRODUCTION
# cd solo # mvn package
构建完成后,将在target目录下生成一个WAR包。
这里可以自己编写Dockerfile,采用Tomcat作为基础镜像,将WAR拷贝到发布目录即可。
而Solo本身内嵌了Jetty(轻量级的 Java Web 容器)和H2(Java SQL 数据库),其官方直接提供了Dockerfile(在工程目录下),所以可以直接基于该Dockerfile构建。
Dockerfile内容如下:
FROM maven:3 ADD . /solo WORKDIR /solo RUN mvn install WORKDIR /solo/target/solo EXPOSE 8080 CMD ["/bin/sh", "-c", "java -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter"]
官方的Dokcerfile选择Maven作为基础镜像,将整个工程复制到镜像中,执行构建,然后暴露8080端口。
# docker build -t blog .
# docker images|grep blog
# docker run -it -p 8080:8080 blog
之后结合Docker学习记录(1)——搭建自己的Docker Registry 将镜像上传至自己的镜像仓库即可。
$(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); });
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句