美文网首页DockerJava web
使用java远程连接docker部署项目

使用java远程连接docker部署项目

作者: 蒹葭残辉 | 来源:发表于2020-04-06 21:22 被阅读0次

本文主要讲解基于docker使用java代码去部署项目。

准备:
1、在需要自动化部署的机器上安装docker,并开启2375端口,(开启2375端口是为了供外部基于 客户端/服务器 的形式去访问,否则只能在当前机器上使用cmd去访问docker了)
2、docker安装的服务器上安装安全证书,可选。具体原因参考:https://blog.csdn.net/qq_34043421/article/details/80123339

我们为了方便操作docker服务器,采用了客户端服务器的形式访问docker。下面就来讲讲如何通过这种方式通过java代码远程部署我们的java项目。

我们首先需要引入用于连接docker的依赖库:

<dependency>
            <groupId>com.github.docker-java</groupId>
            <artifactId>docker-java</artifactId>
            <version>3.2.1</version>
        </dependency>

部署流程:

1、远程连接docker服务器,建立连接。这里是地址对应的是就是服务器端docker地址。

 DockerClient dockerClient = DockerClientBuilder.getInstance("tcp://localhost:2375").build();

2、pull拉取远程镜像(因此,在此之前你需要先制作出一个镜像并push到仓库中)。需要注意的是,我们在pull时候不要重复去拉取,所以做了次判断。

 final List<Image> images = dockerClient.listImagesCmd().exec();
            final Optional<Image> tradeImgOp = images.stream()
                    .filter(img -> ArrayUtils.contains(img.getRepoTags(),
                            "你的镜像地址:版本号"))
                    .findFirst();
            if(!tradeImgOp.isPresent()){
                //镜像已经下载好了,不重新下载

                //1.pull镜像地址
                dockerClient.pullImageCmd("你的镜像地址")
                        .withTag("版本号")
                        .start()
                        .awaitCompletion();
            }

3、创建镜像对应的容器,我们以springboot项目为例,我们在部署后希望挂载springboot对应的yaml文件和日志文件。

   //3.启动docker容器,并与宿主机器挂载配置文件、日志文件
            Ports portBindings = new Ports();
            //映射8080端口
            portBindings.bind(ExposedPort.tcp(8080), Ports.Binding.bindPort(8080));

            checkContainer(dockerClient);

            final CreateContainerResponse containerResponse = dockerClient.createContainerCmd(deployInfo.getImgUrl()+":"+deployInfo.getVersion())
                    .withHostConfig(new HostConfig().withPortBindings(portBindings)
                            .withBinds(new Bind("宿主机器配置文件目录",
                                    new Volume("docker容器对应的配置文件目录")), new Bind("宿主机器日志文件目录",
                                    new Volume("docker容器对应的日志文件目录"))))
                    .withName("hello")
                    .withExposedPorts(new ExposedPort(8080))
                    .exec();

 /**
     * 检查相应的容器是否已经有了,如果已经有了,先移除他再重新部署。
     * @param dockerClient
     */
    private void checkContainer(DockerClient dockerClient) {
        final List<Container> containers = dockerClient.listContainersCmd().exec();
        final Optional<Container> containerOp = containers.stream().filter(e -> ArrayUtils.contains(e.getNames(),"/" + "hello")).findFirst();
        if(hTradeContainerOp.isPresent()){
            final Container container = hTradeContainerOp.get();
            if(container.getState().equals("running")){
                //容器正在运行状态,停止他
                dockerClient.stopContainerCmd("hello").exec();
            }
                 //移除已有的容器
            dockerClient.removeContainerCmd("hello").exec();
        }
    }

4、启动容器。

dockerClient.startContainerCmd(containerResponse.getId()).exec();

此时在浏览器,输入对应的接口地址,即可访问成功。

相关文章

网友评论

    本文标题:使用java远程连接docker部署项目

    本文链接:https://www.haomeiwen.com/subject/ateiphtx.html