Dockerize java project



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

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运行-p 8080:8080-t-i myapp

一旦运行完成,我键入的问题:

http://localhost:8080/

什么都没发生。

或者通过使用poster调用我的vertical的url(localhost:8081/listImport(来查看我的导入列表,不会发生任何事情。

注意:8081上的ImportFileVerticle侦听8082,ExportFileVerticle侦听8083

一旦docker映像启动,我如何调用这些垂直中定义的URL?

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

提前感谢您对的帮助

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

我们在创建图像时所做的是创建一个包含所有依赖项的影子jar,然后在docker图像中使用该可执行jar。为此,我们使用io.vertx.core.Launcher作为我们的主类,然后我们创建一个初始化垂直线来提取我们的配置和机密,然后生成我们需要通过vertx.deployVerticle(CLASS);运行的所有其他垂直线

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

现在回答您的问题:

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

  2. 有两种方法:

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

希望这能有所帮助!

最新更新