Dockerize Java项目

时间:2018-07-12 22:01:51

标签: java maven docker vert.x

我有一个使用vert.x的Maven项目。我将所有顶点部署在Main类中,如下所示:

package launcher;

import io.vertx.core.Vertx;

public class MainLauncher {

    public static void main(String[] args) {

        final Vertx vertx = Vertx.vertx();
        vertx.deployVerticle(new ImportFileVerticle());
        vertx.deployVerticle(new InsertFileVerticle()); 
        vertx.deployVerticle(new ExportFileVerticle());
    }

}

我这样添加了Dockerfile:

FROM maven:3.3.9-jdk-8

RUN mkdir -p /opt/app
WORKDIR /opt/app

COPY pom.xml /opt/app/pom.xml
RUN mvn install
COPY . /opt/app/
RUN mvn package

EXPOSE 8080
CMD ["mvn", "exec:java"]

我在pom.xml中添加了此依赖项:

<dependency>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
</dependency>

我使用以下命令构建图像:

  

docker build -t myapp

我正在运行以下命令:

  

docker run -p 8080:8080 -t -i myapp

运行完成后出现问题,我输入:

  

http://localhost:8080/

什么都没发生。

或者使用邮递员调用我的垂直目录的url(本地主机:8081 / listImport)以查看我的导入列表,

  

注意:ImportFileVerticle监听8081,InsertFileVerticle监听   8082,ExportFileVerticle监听8083

泊坞窗映像启动后,如何调用这些顶点中定义的网址?

我的第二个问题,我有一个包含应用程序前端的docker映像,如何将包含前端的映像与包含后端的映像以及包含mysql的映像进行通信?

预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

关于我们如何运行docker容器的一些信息:

我们为映像创建所要做的就是创建一个将所有依赖项都建立起来的影子jar,然后在docker映像中使用该可执行jar。为此,我们使用io.vertx.core.Launcher作为主类,然后创建一个初始化verticle来提取我们的配置和秘密,然后生成我们需要通过vertx.deployVerticle(CLASS);运行的所有其他ververtes

或者,如果您不想做所有这些工作,则可以使用Vert-Docker

现在回答您的问题:

  1. -p 8080:8080的docker run命令的此部分说明您将8080主机端口绑定到Docker容器中的8080。在上面声明,您正在容器中的端口8081、8082、8083上运行顶点。如果要从主机访问它们,则必须将端口绑定到主机。

  2. 有两种解决方法:

    • 通过-p端口映射将容器端口绑定到主机,并设置其他容器以连接到主机ip地址和指定端口。 请注意,您不能使用localhost,因为localhost是指容器localhost不是主机。
    • 容器链接。您还可以使用--link创建虚拟网络,然后以这种方式链接容器,这将在容器/ etc / hosts文件中创建dns条目,然后将其放入服务的配置中。在这种情况下,如果我在同一台计算机上使用depends_on子句指定从属容器,则通常使用docker-compose。 docker-compose depends_on

希望这会有所帮助!