Tag: Java

针对Docker和DC / OS的JVM优化

我正在将一个裸机Java应用程序(jar jdk8)移动到Docker容器和DC / OS。 我在docker上注意到一个奇怪的模式,我们将-XMX设置为32位,并分配一个36位的docker集装箱。 每隔几个小时左右,应用程序就会在旧的gen mem分配中激增,并且在尝试执行堆转储时,GC将陷入循环(最大CPU)。 有什么优化或者我可以用来看看为什么在这个1-5秒的时间间隔里,我们的速度如此之快? 是否有任何我可能需要知道与Docker和JVM的陷阱? 我们正在使用默认的GC

dockerfile的内容来运行glassfish服务器,并从git仓库部署特定的应用程序

我正在尝试使用glassfish 4.1服务器部署我的java ee应用程序,并且我想将其部署为Docker容器。 因此,我想编写一个正确的docker来下载/启动一个glassfish服务器,然后使用相应的GIT存储库部署我的应用程序。 目前,我能够使用以下Dockerfile构build一个启动glassfish服务器的Docker容器: FROM java:8-jdk ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 ENV GLASSFISH_HOME /usr/local/glassfish4 ENV PATH $PATH:$JAVA_HOME/bin:$GLASSFISH_HOME/bin RUN apt-get update && \ apt-get install -y curl unzip zip inotify-tools && \ rm -rf /var/lib/apt/lists/* RUN curl -L -o /tmp/glassfish-4.1.zip http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip && \ unzip /tmp/glassfish-4.1.zip -d /usr/local && \ rm -f /tmp/glassfish-4.1.zip EXPOSE 8080 4848 8181 WORKDIR […]

使用maven docker插件在maven版本上提交并保存图像

我正在用docker实现一个基于java的微服务。 尽pipe我对Java和Maven很熟悉,但对于Docker来说,我并不是那么喜欢。 该服务将有工作得到一个文件,parsing它的内容,并写入到MongoDB。 之后,服务不需要,直到下一次导入。 解决scheme应该只在每次调用时使用一个文件,并在执行maven版本时进行版本控制。 用法应该是这样的: import.sh file-to-be-imported.xyz Docker最终只需要运行时,而不是开发。 因此,我认为一个执行脚本,就像Docker运行参数一样。 在maven发行版中,我想在testing运行后执行以下“特殊function”: 在目标生成脂肪jar 生成更新后的导入脚本,其目标名称为jar(.jar)(在发布时更新),以便导入脚本 更新版本到新的快照版本(默认使用Maven发布插件) 更新容器到新版本(我猜Docker提交必须用于那个) 提交更新的容器 存储更新的容器到一个图像(不知何故与docker保存,我想) 我想使用它包含的jar对容器进行版本化,因为对实现的更改可能会更改运行时环境或使用情况。 哪个maven插件适合该用例? 我怎样才能改变我的POM用于给定的插件的用例。 我怎样才能从脚本文件加载(以前导出)最新的版本容器? Docker Hub不是我们的select。 我们将用jenkins的目标文件夹将最近的脚本捆绑出来,解决图像的部署问题。 就像之前所说的那样,只要将一个文件名传递给jar的main方法就可以了,这个方法会处理所有的东西,直到导入完成。 没有涉及或需要的应用服务器。

Java项目的Docker镜像

我想做一个Java项目的docker形象。 我首先创build了一个目录,并在其中创build了一个docker.txt文件。 这些文件包含这个 FROM java:8 # Install maven RUN apt-get update RUN apt-get install -y maven WORKDIR /home/mmt/CouchBaseClient/CB-RestAPI/CouchBaseThinClient # Prepare by downloading dependencies ADD pom.xml /home/mmt/CouchBaseClient/CB-RestAPI/CouchBaseThinClient/pom.xml RUN ["mvn", "dependency:resolve"] RUN ["mvn", "verify"] # Adding source, compile and package into a fat jar ADD src /home/mmt/CouchBaseClient/CB-RestAPI/CouchBaseThinClient/src RUN ["mvn", "package"] EXPOSE 4567 CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "target/sparkexample-jar-with-dependencies.jar"] 然后我在terminal运行下面​​的命令 […]

如何构build一个Java应用程序的docker容器

我想要做的是为我的Java应用程序构build一个docker镜像,但是对于大多数编译语言来说,下面的考虑应该是真实的。 问题 在我的构build服务器上,我想为我的应用程序生成一个docker镜像作为交付物。 为此,我必须使用一些构build工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创build的JAR文件添加到泊坞窗图像中。 因为我希望Docker镜像只执行JAR文件,所以我将从已经安装了Java的基础镜像开始。 有三种方法可以做到这一点: 让构build工具控制过程 在这种情况下,我的构build工具控制整个过程。 所以它准备了JAR文件,在创buildJAR之后,它会调用Docker来创build映像。 这是因为事先创build了JAR,而Docker可能忘记了创buildJAR所需的构build过程。 但是我的Dockerfile不再是独立的。 它取决于在Docker之外发生的步骤。 在我的Dockerfile中,我将有一个COPY或ADD语句,它应该将JAR文件复制到图像中。 当事先未创buildjar时,这个语句会失败。 所以只是执行Dockerfile可能不起作用。 如果您想要使用DockerHub上的自动构buildfunction来构build使用当前Dockerfile的服务,就会成为一个问题。 让Docker控制构build 在这种情况下,创build映像所需的所有步骤都会添加到Dockerfile中,以便通过执行Docker构build来创build映像。 这种方法的主要问题是没有办法添加到Dockerfile命令,这些命令应该在创build的docker镜像之外执行。 这意味着我必须将我的源代码和构build工具添加到泊坞窗图像中,并在图像中构build我的JAR文件。 这将导致我的图像比它必须是由于所有添加的文件在运行时将是不必要的。 这也会为我的图片添加额外的图层。 编辑: 正如@ adrian-mouat指出,如果我要添加源,build立应用程序并删除一个RUN语句中的源,我可以避免添加不必要的文件和图层到Docker镜像。 这将意味着创造一些疯狂的链式命令。 两个独立的版本 在这种情况下,我们将构build分为两部分:首先,使用构build工具创buildJAR文件,并将其上传到存储库(Maven或Ivy存储库)。 然后,我们触发一个单独的Docker构build,它只是从存储库中添加JAR文件。 结论 在我看来,更好的方法是让构build工具控制过程 。 这将导致一个干净的docker形象,因为图像是我们想要传递这是重要的。 为了避免有一个潜在的不工作的Dockerfile应该被创build作为构build的一部分。 所以没有人会意外地使用它来开始一个破碎的构build。 但是这不允许我与DockerHub集成。 题 有没有另一种方法我失踪?

Docker设置

今天我正在阅读Docker的许多内容,甚至试图在我的笔记本电脑上运行Vagrant。 但是我还不清楚为什么,特别是如何把它介绍给我的团队。 只是我没有看到用例。 我知道你可以为Web服务器和数据库创build容器。 所以现在你可以说嗨你们正在使用我创build的custom-tomcat-1.0和custom-mysql-1.4容器。 到目前为止如此清楚。 我遇到的问题是那些“数据容器”。 我仍然可以理解,我将DB-data-1.4与数据库容器的数据文件更新到当前模式,我可以用我的可部署的,这将以某种方式与DB数据图像对应的WEB-app-3.5。 那么Java呢? 如果我将有Java DB,我将需要在所有使用它的容器上安装JVM? 到目前为止是否有任何意义? 现在几件事情我没有看清楚。 开发人员将如何与本地工作呢? 他会创build一些WEB应用程序图像快照并启动它? 或者以某种方式将跳过使用WEB应用程序图像,并以某种方式直接将构build文件提供给服务器映像? jenkins,我想它会从git下载代码。 build立它并创build一些WEB应用程序图像快照。 开始一切。 现在我可以运行一些集成testing,以某种方式从外部使用应用程序,但是如何? 基本上有两个问题:你如何在Docker上进行本地开发,以及如何执行集成testing。 我需要真实的用例,所以我可以看到它的大局。 我们正在使用maven,java,spring,sql db,jenkins,junit。

如何在Docker容器中热部署Java EE应用程序

我正在寻找将Java EE应用程序热部署到Docker容器中的可能性。 我发现最有趣的内容是可以通过“卷”在主机和容器之间共享tomcat目录。 但这不是一个热门的部署。 参考: https : //groups.google.com/forum/#!topic/docker- user/ b_4NRn9sLBQ 有关如何达到它的任何build议?

无法通过java-client连接到Dockerized elasticsearch

我使用OFFICIAL REPO elasticsearch docker镜像设置了一个elasticsearch容器。 然后运行它 docker run -dP elasticsearch 容易和工作。 ps的信息是 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 658b49ed9551 elasticsearch:latest "/docker-entrypoint. 2 seconds ago Up 1 seconds 0.0.0.0:32769->9200/tcp, 0.0.0.0:32768->9300/tcp suspicious_albattani 我可以通过端口32769-> 9200使用http-client访问服务器 baihetekiMacBook-Pro:0 baihe$ curl 10.211.55.100:32769 { "status" : 200, "name" : "Scorpia", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.5", "build_hash" : […]

无法使用JDBC连接到mySql docker容器

我使用Docker Maven插件 当testing集成开始时,我可以通过以下命令在terminal的容器上连接到mysql: mysql -h 127.0.0.1 -P 32795 -uroot -p 和万物运作良好,但是当我想连接在Java应用程序的JDBC与JDBC与这个代码: Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:" + System.getProperty("mysqlPort") + "/dashboardmanager", "root", "root" ); 我得到这个错误: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver […]

Docker镜像创buildexception:“此存档包含未closures的条目”

我正在使用Docker,我正在尝试使用docker-java API从dockerfile构build一个图像。 在这里你可以find如何做到这一点,我也这样做: protected void createDocker(DockerBuildRequestContext requestContext) throws Exception { InputStream response = dockerClient.buildImageCmd(requestContext.getBuildDir()).exec(); StringWriter logwriter = new StringWriter(); try { LineIterator itr = IOUtils.lineIterator(response, "UTF-8"); while (itr.hasNext()) { String line = itr.next(); logwriter.write(line); LOG.info(line); } } finally { IOUtils.closeQuietly(response); } 但是我得到了这个例外: com.github.dockerjava.api.model.Info@47a4d139[containers=2,debug=false,driver=aufs,driverStatuses=[[Root Dir, /var/lib/docker/aufs], [Dirs, 40]],executionDriver=native-0.2,IPv4Forwarding=1,images=36,IndexServerAddress=https://index.docker.io/v1/,initPath=/usr/bin/docker,initSha1=,kernelVersion=3.13.0-39-generic,memoryLimit=true,nEventListener=0,NFd=11,NGoroutines=11,sockets=<null>,swapLimit=0] Build docker located at: /home/mati/Projects/engage/server/platforms/preserve/engage-app/engage-app-docker/target/docker/tomcat7-base and tagged: tomcat-base […]