我正在寻找将Java EE应用程序热部署到Docker容器中的可能性。
我发现最有趣的内容是通过“卷”在主机和容器之间共享tomcat目录的可能性。但这还不是一个热门的部署。
参考:https://groups.google.com/forum/#!topic/docker-user/b_4NRn9sLBQ
对如何到达它有什么建议吗?
发布于 2018-07-20 19:49:19
我知道这个问题有点老了,但我想分享我关于如何在Docker中使用tomee服务器开发java应用程序的知识。
准备Docker镜像
首先要做的是启用日志记录。我使用官方的基本镜像,并将日志重定向到stdout,以便在我的控制台上查看:
# you can change the base image of course
FROM tomee:8-jre-1.7.5-jaxrs
RUN ln -s /dev/stdout /usr/local/tomee/logs/catalina.out
RUN echo '<?xml version="1.0" encoding="utf-8"?><tomcat-users><role rolename="tomee-admin"/><user username="tomee" password="tomee" roles="tomee-admin,manager-gui,manager-script"/></tomcat-users>' > /usr/local/tomee/conf/tomcat-users.xmllog添加可能看起来不是什么大问题,但它确实是。启用此功能后,您可以立即看到部署的成功(或失败)。丑陋的xml片段实际上非常重要。它使名为tomee的用户具有部署应用程序的所有重要权限。
您可以使用普通的docker工具构建镜像:
docker build -t tomee-dev .准备开发环境
我使用标准的maven目录布局。下面是一个示例:
pom.xml
src
|
- main
|
- java
| |
| - boundary
| |
| - TestResource.java
- webapp
|
- WEB-INF
|
- web.xml这些文件的内容可以在此答案的底部找到。
像这样启动容器:
docker run -it --rm -p 8080:8080 tomee-dev最后一块拼图是我们的maven配置。您可以使用tomee maven插件进行重新部署。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<username>tomee</username>
<password>tomee</password>
<path>/${project.artifactId}</path>
</configuration>
</plugin>
</plugins>
</build>您现在可以使用mvn clean tomcat7:deploy和mvn clean tomcat7:redeploy命令来部署/重新部署您的应用程序。
附录
下面是我在示例中使用的源文件和配置文件的内容:
src/main/java/boundary/TestResource.java
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
@Path("/")
public class TestResource {
@GET
@Path("test")
public Response test1() {
return Response.ok("this is a test").build();
}
}src/main/java/webapp/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_3_0.xsd"
version="3.0">
<module-name>hot-deploy</module-name>
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
</web-app>pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>hot-reload</artifactId>
<groupId>org.test.stackoverflow.answers</groupId>
<version>1.0.0-snapshot</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<tomee-plugin.pwd>tomee</tomee-plugin.pwd>
<tomee-plugin.user>tomee</tomee-plugin.user>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<scope>provided</scope>
<version>7.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<username>tomee</username>
<password>tomee</password>
<path>/${project.artifactId}</path>
</configuration>
</plugin>
</plugins>
</build>
</project>发布于 2017-05-24 21:12:21
如果您以只读方式将主机的卷挂载到几个容器中,请确保tomcat不会“分解”war文件,至少不会将其“分解”到同一文件夹中,那么我认为您拥有了热部署,至少达到了tomcat可以支持的级别。替换主机文件夹中的.war文件应该会触发重新部署。
https://stackoverflow.com/questions/31246526
复制相似问题