Tag: Java

如何减less我的java / gradle docker镜像大小?

我有一个像下面这样的Docker文件: FROM openjdk:8 ADD . /usr/share/app-name-tmp WORKDIR /usr/share/app-name-tmp RUN ./gradlew build \ mv ./build/libs/app-name*.jar /usr/share/app-name/app-name.jar WORKDIR /usr/share/app-name RUN rm -rf /usr/share/app-name-tmp EXPOSE 8080 RUN chmod +x ./docker-entry.sh ENTRYPOINT [ "./docker-entry.sh" ] 问题是,最终的图像大小是1.1GB,我知道这是因为gradle下载和存储所有的依赖关系。 删除这些不必要的文件并保留jar的最好方法是什么?

如何传递系统属性到docker集装箱?

所以我知道你可以通过使用-e来将环境variables传递给docker容器: docker run -it -e "var=var1" myDockerImage 但是我需要将系统属性传递给docker容器,因为这是我运行JAR的方式: java -Denviroment=dev -jar myjar.jar 那么如何在Docker中传递-D系统属性? 喜欢: docker run -it {INSERT Denviroment here} myDockerImage

使用Docker设置Java开发环境

最近几天我花了很多时间挖掘docker。 我对开发环境的可能性印象深刻,可能与生产环境相同! 目前我想从小处着手,并开始加强发展进程。 我们正在开发部署在tomcat上的Java应用程序。 开发人员正在使用像Eclipse和IntelliJ这样的IDE。 在开发过程中,您可以在IDE中configurationtomcat环境,以便自动部署和debugging代码。 因此,tomcat的基本目录必须可用来设置。 目前我有一个docker debian镜像,在/ opt / tomcat上安装tomcat。 我现在希望能够将container / opt / tomcat目录的内容链接到我的主机中的一个目录。 可悲的是,function似乎并不存在。 使用-v选项,您只能在容器中挂载主机目录,而不能以其他方式挂载。 目前我看到的唯一的解决scheme是挂载容器的webapps目录,并把我的war文件放在这里,这在我看来是非常不利的。 你必须手动启动/重新启动你的tomcat,只有远程debugging是可能的,你的IDE控制台里没有你的日志。 那么,有没有人有任何想法优化使用Docker的Java Web应用程序开发的开发工作stream?

Docker tomcat编辑扩展的war文件

我正在使用docker来部署运行第三方war文件的tomcat容器。 我的Dockerfile看起来像这样 FROM tomcat:7-jre8 ADD my.war ${CATALINA_HOME}/webapps/my.war 当我运行容器时,tomcat在运行时扩大了我的war ,我可以很高兴地通过http://my.ip.addr:8080/mywar/访问我的应用程序。 但是我的问题是,我想在war编辑一些configuration文件。 我真的不想打包和重新打包war文件,因为这似乎凌乱,难以维护。 我希望能够告诉tomcat作为我的RUN步骤的一部分扩大war ,然后使用ADD放入我的自定义文件,但我似乎无法find一个这样做的方式。 战争只有在CMD执行时才会扩大,之后我无法编辑这些文件。

org.elasticsearch.client.transport.NoNodeAvailableException:没有configuration的节点可用:

我在Docker上运行ElasticSearch在本地可用 $ curl http://192.168.99.100:9200/?pretty { "status" : 200, "name" : "Collector", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.4", "build_hash" : "c88f77ffc81301dfa9dfd81ca2232f09588bd512", "build_timestamp" : "2015-02-19T13:05:36Z", "build_snapshot" : false, "lucene_version" : "4.10.3" }, "tagline" : "You Know, for Search" } 我使用Elastic4s ,连接到ElasticSearch ,我尝试了下面的方法,但他们都给了我错误 val client = ElasticClient.remote(host = "192.168.99.100", port = 9200) 和 val settings […]

JMX – 远程pipe理到docker-compose容器中 – 无法检索RMIServer存根

我想将REAL远程JMXpipe理放入运行Spring Boot应用程序的Docker容器中: build筑学剪影 我读过很多文档,我的理解是这应该是服务器端configuration: java \ -Djava.rmi.server.hostname=10.0.2.15 \ -Dcom.sun.management.jmxremote.port=8600 \ -Dcom.sun.management.jmxremote.rmi.port=8601 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.local.only=false \ -jar my-spring-boot-app.jar 在JVisualVM中使用的URL应该是service:jmx:rmi://10.0.2.15:8601/jndi/rmi://10.0.2.15:8600/jmxrmi 。 但是这个失败 ( 无法检索RMIServer存根 )在JVisualVM(在机器1上启动) – 这是日志输出: 导致:java.io.IOException:未能在javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:369)上的com.sun.tools.visualvm.jmx.impl.JmxModelImpl $ ProxyClient.tryConnect上检索RMIServer存根(JmxModelImpl.java:549)[catch] at com.sun.tools.visualvm.jmx.impl.JmxModelImpl $ ProxyClient.connect(JmxModelImpl.java:486)at com.sun.tools.visualvm.jmx.impl.JmxModelImpl。连接(JmxModelImpl.java:214) 如果我将服务器应用程序configuration更改为-Djava.rmi.server.hostname=172.19.0.6 (我使用BRDIGE dockernetworking…,因此可以路由到172.19.0.6 )。 有了这个configuration,如果在Docker主机(机器2)上启动JVisualVM,我能够执行JMX监视。 但是这是没有实际的远程pipe理,因为路由到172.19.0.6通常是不可能的。 一些额外的信息: 端口8600,8601暴露在外,显示为LISTEN: pfh@workbench ~/temp/ % netstat -taupen | grep 860 tcp6 0 0 […]

从Docker运行改为Docker-compose; 关于集装箱间networking通信的不可预知的行为

经过两天的摸索,我决定向公众介绍我的问题。 我们使用Docker来设置我们的testing环境。 我们正在testing一个Java-Client-Server-Application。 在过去,应用程序只是为了在“单站点”configuration(1台服务器和x个客户端)中运行。 现在我们将应用程序升级到“多站点”configuration(x服务器和y客户端)。 出于这个原因,我们从Docker运行改为Docker-compose,以便轻松构build“复杂”networking。 用Docker运行我们没有遇到任何问题。 通过Docker-compose,我们可以像我们希望的那样build立一个networking(例如,4台服务器和2台客户机)。 我们也可以通过SSH和VNC访问每个容器,并且能够在自己的networking内的每个容器之间进行ping。 问题:我们的Java客户端无法连接到那里的服务器。 即使他们在同一个networking。 而现在真正令人沮丧的是: 也许5个客户端中的1个能够连接到他的服务器。 直到现在,我将它称为一个完整的随机行为。 它并不总是第五个容器工作或相同的networkingconfiguration。 此外,1-Server-1-Client-Network不能始终工作。 最后一个可能在第五次尝试之后。 首先,我认为我也必须公开RMI端口,但是这不起作用。 后来我打开所有的港口,只是肯定,但也没有工作。 关于Docker-Docs,也没有必要这样做。 此外,它也不能解释它有时会起作用的行为。 我的问题是,我没有设置原来的Docker-Run-Configuration,也许我错过了这里的一些重要部分。 也许你的某个人可以指引我正确的方向。 问候,凯 自动创build的yaml-File的代码: version: '2.1' services: foo_server_1: image: foo_server:latest mem_limit: 1g memswap_limit: 2g container_name: foo_server_1 ports: – "22" – "4567" networks: – foo_server_network – client_net_1 foo_client_1_1: image: foo_client:latest mem_limit: 1g memswap_limit: 2g links: […]

如何使用docker-java API连接docker?

我是新来的docker工人,我想用java API来打印我的docker信息。 然后我在这个链接中find有关docker-java的Api。 我发现我的boot2docker ip是196.168.59.103:2376。 我使用这个命令: docker -H tcp://192.168.59.103:2376 version 它可以成功地告诉我这些信息: Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): darwin/amd64 Server version: 1.7.0 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 0baf609 OS/Arch (server): linux/amd64 然后,我在eclipse中新build一个maven项目,并运行这个代码: public static void main(String[] args) { DockerClient […]

在AWS Elastic Beanstalk应用程序中运行Tomcat Docker时进行端口转发

我有一个运行在AWS Elastic Beanstalk (EB)上的docker容器内的Tomcat 7.0 webapp(我在这里跟着教程)。 当我浏览到我的EBurlmyapplication.elasticbeanstalk.com时 ,我得到了由Nginx服务的502 Bad Gateway 。 所以立即清楚,我的端口80没有转发到我的容器。 当我浏览到myapplication.elasticbeanstalk.com:8888 (我在Dockerfile中公开的另一个端口)时,连接被拒绝( ERR_CONNECTION_REFUSED )。 所以我SSH到AWS实例,并检查docker日志,这表明我的Tomcat服务器已成功启动,但显然还没有处理任何请求。 有没有人有任何想法我的端口8888似乎没有转发到我的容器? 执行命令(在AWS实例上): sudo docker ps -a 得到: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c353e236da7a aws_beanstalk/current-app:latest "catalina.sh run" 28 minutes ago Up 13 minutes 80/tcp, 8080/tcp, 8888/tcp sharp_leakey 显示端口80,8080和8888在docker集装箱上打开。 我的Dockerfile非常简单: FROM tomcat:7.0 EXPOSE 8080 EXPOSE 8888 EXPOSE […]

在Docker镜像中部署WAR文件的正确方法

docker容器中部署java项目的docker方式是什么? 我是否将战争复制到webapps中: FROM jetty:9.2.10 MAINTAINER Me "me@me.com" ADD ./target/*.war /var/lib/jetty/webapps/ROOT.war 或者我拿起爆炸的战争文件: FROM jetty:9.2.10 MAINTAINER Me "me@me.com" ADD ./target/app-0.1.0.BUILD-SNAPSHOT /var/lib/jetty/webapps/ROOT 通常情况下,如果它是一个普通的容器,但是使用docker,则会部署密封的war文件,这意味着每次进行小的更改时都会推送一个10-20MB的文件,而添加爆炸的war文件只会推动差别 – .class文件已经改变。 部署爆炸战争而不是战争文件有什么缺点吗?