docker-java 用Java操作docker创建容器并运行运行容器

这篇具有很好参考价值的文章主要介绍了docker-java 用Java操作docker创建容器并运行运行容器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍀开启Docker远程访问

参考上一篇文章:Docker设置开启远程访问

🍀创建项目并引入docker-java依赖


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

        <!-- docker java httpclient -->
        <dependency>
            <groupId>com.github.docker-java</groupId>
            <artifactId>docker-java-transport-httpclient5</artifactId>
            <version>3.2.13</version>
        </dependency>

Apache HttpClient 5介绍:

This transport is based on Apache HttpClient library version 5, which has a great flexibility and allows us to implement all Docker-specific features and protocols required, without having to use internal APIs or anything.
It has everything to become the default transport of docker-java in future releases.

Apache HttpClient 5基于Apache HttpClient库实现,具有很大的灵活性,我们无需使用docker内部API,就可以实现所有Docker特定功能和协议。并且在未来的版本中,它将成为docker java的默认传输工具。

除Apache HttpClient 5以外,还可以使用Zerodep、OkHttp、Jersey和Netty实现docker的连接传输。

docker的一些配置选项

访问docker的配置

docker:
  host: tcp://192.168.1.17:2375
  api-version: 1.41

☘️连接docker

import com.github.dockerjava.core.DockerClientConfig
import com.github.dockerjava.core.DefaultDockerClientConfig


    /**
     * 连接docker服务器
     *
     * @return
     */
    public DockerClient connect() {
        // 配置docker CLI的一些选项
        DefaultDockerClientConfig config = DefaultDockerClientConfig
                .createDefaultConfigBuilder()
                .withDockerTlsVerify(DOCKER_TLS_VERIFY)
                .withDockerHost(HOST)
                // 与docker版本对应,参考https://docs.docker.com/engine/api/#api-version-matrix
                // 或者通过docker version指令查看api version
                .withApiVersion(API_VERSION)
                .withRegistryUrl(REGISTRY_URL)
                .build();

        // 创建DockerHttpClient
        DockerHttpClient httpClient = new ApacheDockerHttpClient
                .Builder()
                .dockerHost(config.getDockerHost())
                .maxConnections(100)
                .connectionTimeout(Duration.ofSeconds(30))
                .responseTimeout(Duration.ofSeconds(45))
                .build();

        DockerClient dockerClient = DockerClientImpl.getInstance(config, httpClient);
        Info info = dockerClient.infoCmd().exec();
        String infoStr = JSONObject.toJSONString(info);
        System.out.println("docker环境信息");
        System.out.println(infoStr);
        return dockerClient;
    }

额外的一些配置

  • DOCKER_HOST Docker的地址,比如: tcp://localhost:2376 或者unix:///var/run/docker.sock
  • DOCKER_TLS_VERIFY 是否开启 TLS 验证 (httphttps 之间切换)
  • DOCKER_CERT_PATH TLS 验证的证书路径
  • DOCKER_CONFIG 其他docker配置文件的路径 (比如 .dockercfg)
  • api.version API version版本
  • registry.url 下载源地址(docker镜像存放的地址)
  • registry.username 登陆用户名 (推送镜像到docker云仓库时需要)
  • registry.password 登陆用户密码(推送镜像到docker云仓库时需要)
  • registry.email 登陆账户的邮箱(推送镜像到docker云仓库时需要)

☘️拉取镜像


    /**
     * 拉取镜像
     *
     * @param client
     * @param imageName
     * @return
     * @throws InterruptedException
     */
    public boolean pullImage(DockerClient client, String imageName) {
        boolean isSuccess = false;
        try {
            isSuccess = client.pullImageCmd(imageName)
                    .start()
                    .awaitCompletion(30, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            return isSuccess;
        }
    }

☘️查看镜像信息


    /**
     * 查看镜像详细信息
     *
     * @param client
     * @param imageName
     * @return
     */
    public String inspectImage(DockerClient client, String imageName) {
        InspectImageResponse response = client.inspectImageCmd(imageName).exec();
        System.out.println(response.toString());
        System.out.println(JSONObject.toJSONString(response));
        return JSONObject.toJSONString(response);
    }

☘️删除镜像


    /**
     * 删除镜像
     *
     * @param client
     * @param imageName
     */
    public void removeImage(DockerClient client, String imageName) {
        client.removeImageCmd(imageName).exec();
    }

☘️构建镜像

    /**
     * 构建镜像
     *
     * @param client
     * @param dockerProp
     * @return
     */
    public String buildImage(DockerClient client, DockerProp dockerProp) {
        ImmutableSet<String> tag = ImmutableSet.of(dockerProp.getImageName() + ":" + dockerProp.getImageTag());
        String imageId = client.buildImageCmd(new File(dockerProp.getDockerfilePath()))
                .withTags(tag)
                .start()
                .awaitImageId();
        return imageId;
    }

☘️给镜像打tag

    /**
     * 给镜像打tag
     * @param client
     * @param dockerProp
     */
    public void tagImage(DockerClient client, DockerProp dockerProp) {
        client.tagImageCmd(dockerProp.getImageName(), dockerProp.getRespository(), dockerProp.getTag()).exec();
    }

☘️加载镜像文件


    /**
     * 加载镜像文件
     *
     * @param client
     * @param inputStream
     */
    public static void loadImage(DockerClient client, InputStream inputStream) {
        client.loadImageCmd(inputStream).exec();
    }

☘️获取镜像列表

    /**
     * 获取镜像列表
     *
     * @param client
     * @return
     */
    public List<Image> imageList(DockerClient client) {
        List<Image> imageList = client.listImagesCmd().withShowAll(true).exec();
        return imageList;
    }

☘️创建容器

/**
     * 创建容器
     *
     * @param client
     * @return
     */
    public CreateContainerResponse createContainers(DockerClient client, DockerProp dockerProp) {
        // 端口绑定
        Map<Integer, Integer> portMap = Optional.ofNullable(dockerProp).map(DockerProp::getPartMap).orElse(new HashMap<>());
        Iterator<Map.Entry<Integer, Integer>> iterator = portMap.entrySet().iterator();
        List<PortBinding> portBindingList = new ArrayList<>();
        List<ExposedPort> exposedPortList = new ArrayList<>();
        while (iterator.hasNext()) {
            Map.Entry<Integer, Integer> entry = iterator.next();
            ExposedPort tcp = ExposedPort.tcp(entry.getKey());
            Ports.Binding binding = Ports.Binding.bindPort(entry.getValue());
            PortBinding ports = new PortBinding(binding, tcp);
            portBindingList.add(ports);
            exposedPortList.add(tcp);
        }

        CreateContainerResponse container = client.createContainerCmd(dockerProp.getImageName())
                .withName(dockerProp.getContainerName())
                .withHostConfig(newHostConfig().withPortBindings(portBindingList))
                .withExposedPorts(exposedPortList).exec();

        return container;
    }

☘️启动容器


    /**
     * 启动容器
     *
     * @param client
     * @param containerId
     */
    public void startContainer(DockerClient client, String containerId) {
        client.startContainerCmd(containerId).exec();
    }

☘️停止容器


    /**
     * 停止容器
     *
     * @param client
     * @param containerId
     */
    public void stopContainer(DockerClient client, String containerId) {
        client.stopContainerCmd(containerId).exec();
    }

☘️删除容器

    /**
     * 删除容器
     *
     * @param client
     * @param containerId
     */
    public void removeContainer(DockerClient client, String containerId) {
        client.removeContainerCmd(containerId).exec();
    }

部分代码未展示,全部代码请点击源码查看源码:https://github.com/BerBai/JavaExample/tree/master/dockerjavademo

参考
https://github.com/docker-java/docker-java/blob/master/docs/getting_started.md
https://docs.docker.com/

其他系列文章

docker 安装 与 卸载 centos
Windows11 安装Docker,安装至D盘(其他非C盘皆可)
Windows11 Docker镜像存储路径更改(非C盘路径)

Dockerfile 文件结构、docker镜像构建过程详细介绍
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
构建Docker镜像指南,含实战案例
Docker 制作自定义化的Tomcat镜像
docker 安装 mysql 并映射数据库存放路径及配置文件
docker安装tomcat 映射配置文件、日志文件
docker安装nginx,配置nginx,并成功访问
docker安装redis并将配置文件和数据文件映射到外部
Docker 容器互联 --link 和 自定义网络
docker 完成 redis集群搭建
Docker Compose 简介、安装、初步体验
Docker Compose学习之docker-compose.yml编写规则 及 实战案例
Docker Compose配置springboot微服务项目
Docker Swarm 初步认识 及 集群搭建
Docker设置开启远程访问
docker-java 用Java操作docker创建容器并运行运行容器

VMware配置网络,主机互通,可上网文章来源地址https://www.toymoban.com/news/detail-408992.html

到了这里,关于docker-java 用Java操作docker创建容器并运行运行容器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker-java

    2.1 docker已安装 2.2 运行程序用户的docker使用权限 默认docker安装后是root权限运行的,比如运行程序的用户是admin用户,则需要将admin用户加加入到docker用户组 gpasswd -a admin docker systemctl restart docker 2.3 docker.service 的访问方式,需要开启tcp访问默认,不然可能导致非root用户运行程序

    2024年02月10日
    浏览(38)
  • docker export,import后无法运行,如java命令找不到,运行后容器内编码有问题

    为什么用docker export呢,😔~由于客户环境太恶心了,测试一次更是麻烦,所以什么都得在本地调试完成,争取每次测试+上线一次通过才行,说多了都是泪。 由于踩坑几次了,每次都忘记,且每次网上找半天也难以发现问题,今日决定记录一笔。 在进行docker export导出镜像,然

    2024年02月15日
    浏览(46)
  • 使用Docker容器部署java运行环境(java8 + mysql5.7 + redis5.0 + nginx1.14.1

    环境:阿里云ECS服务器 1.1 安装工具 1.2 为yum源添加docker仓库位置 1.3 将软件包信息提前在本地索引缓存 (非必要,建议执行,可以提升yum安装的速度,报错去掉fast试试) 1.4 安装Docker 傻瓜式安装 点击y 1.5 启动Docker 1.6 设置开机自启动 1.7 安装完成后可以测试一下,是否安装成功

    2024年02月02日
    浏览(78)
  • 轻松上手Docker:学习如何创建和运行自己的Docker容器

    容器化技术,它是一种虚拟化技术,用于在计算机系统中隔离和运行应用程序。容器将应用程序及其所有依赖项打包到一个独立的、可移植的环境中,使其能够在不同的计算机或操作系统上运行。 容器的特点 :隔离性、轻量级、可移植性、弹性伸缩、生态系统。 目前最流行

    2024年02月04日
    浏览(53)
  • 环境配置 | win10上配置Docker,创建容器并运行【图文详解】

    本文利用图文,详解了在win10上如何配置Docker,创建容器并运行,超简单版~ 电脑环境:windows10家庭版 一定要确认好版本:查看自己的电脑版本,以下操作win10家庭版和专业版都可以。 点击右侧的getDocker 即可,可以看到按钮上面对操作系统的要求为win10专业版 或企业版64位,

    2024年02月07日
    浏览(59)
  • Docker已经创建运行启动的容器,如何修改容器中的环境变量env使长期有效

    [root@jenkins ~]# docker info | grep ‘Docker Root’ Docker Root Dir: /data/docker 方式一: 方式二: docker ps -a --no-trunc |grep pdmaas 2bd5ad1314bfff05099142aae2f896fc4c3ee6b640160d27fb7c4d8ce1d5aead pdmaas:1.3.2 “bash start.sh” 4 weeks ago Exited (137) 28 minutes ago pdmaas 建议:修改前先备份 建议:修改前先备份 或 json文件

    2024年02月08日
    浏览(60)
  • ubuntn之容器的基本操作(安装docker|运行容器|portainer)

    目录 一、安装Docker引擎         1.方法一:手动安装(手动添加软件源)                2、方法二:脚本自动化安装  二、安装后的检查操作 三、运行一个容器 四、进入容器 五、镜像生命周期管理 一、镜像part 二、创建容器、启动容器 三、暂停/继续容器 四、 终

    2024年01月18日
    浏览(50)
  • 【docker】容器的运行、停止、查看等基本操作

    Docker image是一个 read-only 文件,位于磁盘上 这个文件包含文件系统,源码,库文件,依赖,工具等一些运行application所需要的文件 可以理解成一个模板 docker image具有分层的概念 一个运行中的docker image,位于内存中 实质是复制image并在image最上层加上一层 read-write 的层(称之为

    2024年02月10日
    浏览(53)
  • 【Java】微服务——Docker容器部署(docker安装,docker配置镜像加速,DockerHub,docker基本操作,Dockerfile自定义镜像.Docker-Compose)

    微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1.1.1.应用部署的环境问题 大型项目组件较多,运

    2024年02月04日
    浏览(56)
  • docker基本操作:安装部署、设置ssh远程登入、配置docker镜像文件并创建docker容器

    Docker 是一个流行的应用程序容器化和部署平台,允许开发人员轻松地创建、部署和管理容器中的应用程序。 请注意运行此命令需要 root 或 sudo 权限,因此可能需要在命令前加上 sudo 并输入密码。 一、更新系统工具(ubuntu) 安装docker 查看docker版本 启动docker服务 二、一些基本

    2024年02月04日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包