Java API 操作Docker浅谈

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

背景:

使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程,包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。

前提:

首先,在你的Java项目中添加com.github.docker-java库的依赖。你可以在你的构建工具(如Maven或Gradle)的配置文件中添加以下依赖项:

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

创建Docker客户端

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.DockerClientBuilder;

DockerClient dockerClient = DockerClientBuilder.getInstance()
        .withDockerHost("tcp://localhost:2375")
        .withDockerCertPath("/path/to/cert")
        .withApiVersion("1.41")
        .build();

通过withDockerHost()方法设置了Docker守护进程的连接地址,withDockerCertPath()方法设置了TLS证书的路径,withApiVersion()方法设置了Docker API的版本。最后,通过调用build()方法构建了一个DockerClient对象。

  1. DockerClientBuilder类是用于构建和配置DockerClient对象的构建器类。它提供了一组方法,用于设置与Docker守护进程通信所需的参数和配置。

  2. getInstance()DockerClientBuilder类的静态方法。通过调用该方法,可以获取DockerClientBuilder的单例实例。

  3. DockerClientBuilder使用单例模式的设计,主要是为了提供对Docker守护进程的访问的全局共享实例。这样可以避免重复创建和销毁DockerClientBuilder实例,提高了性能和效率。

  4. 使用DockerClientBuilder.getInstance()方法获取DockerClientBuilder的实例后,可以通过该实例进行链式调用,设置各种与Docker守护进程通信相关的参数和配置。

  5. 通过链式调用DockerClientBuilder的方法,可以设置例如Docker守护进程的连接地址、认证信息、超时时间、TLS配置等。这些方法包括withDockerHost()withDockerCertPath()withDockerConfig()withApiVersion()等。

  6. 最后,通过调用build()方法,可以构建出一个DockerClient对象,用于与Docker守护进程进行交互。该对象可以执行各种Docker操作,如创建容器、启动容器、构建镜像等。

创建镜像

import com.github.dockerjava.api.command.BuildImageResultCallback;

String dockerfilePath = "/path/to/dockerfile";
String imageName = "my-image";
String imageTag = "latest";

dockerClient.buildImageCmd()
    .withDockerfile(new File(dockerfilePath))
    .withTags(Collections.singleton(imageName + ":" + imageTag))
    .exec(new BuildImageResultCallback())
    .awaitCompletion();
  • withDockerfile(new File(dockerfilePath)):指定Dockerfile的路径,用于构建镜像。
  • withTags(Collections.singleton(imageName + ":" + imageTag)):指定镜像的标签。可以通过withTags方法传递一个包含镜像标签的集合,这里使用Collections.singleton()方法创建一个只包含一个元素的集合 
  • withBaseDirectory(baseDirectory):设置基础目录,该目录中包含了构建镜像所需的所有文件。与withDockerfile()一起使用时,会自动将基础目录中的Dockerfile关联到构建命令中。
  • withNoCache():禁用缓存,每次构建镜像时都会重新执行所有命令,确保使用最新的文件和依赖项。
  • withPull(pull):指定是否应该在构建之前拉取最新的基础镜像,默认为false,即不拉取。
  • withQuiet():设置静默模式,不输出构建镜像的日志信息。
  • withBuildArg(buildArg):使用Map<String, String>类型的参数设置构建参数。键值对表示构建参数的名称和值。
  • withLabels(labels):使用Map<String, String>类型的参数设置镜像的标签。键值对表示标签的键和值。
  • withBuildArgs(buildArgs):使用Map<String, String>类型的参数设置构建参数。与withBuildArg()类似,但可以一次设置多个构建参数。
  • withPull():设置是否应该在构建之前拉取最新的基础镜像。
  • withProgressHandler(progressHandler):设置用于处理构建镜像进度的ProgressHandler

创建容器

import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Volume;

String imageName = "my-image";
String containerName = "my-container";
int hostPort = 8080;
int containerPort = 80;
String volumeHostPath = "/host/path";
String volumeContainerPath = "/container/path";

CreateContainerResponse container = dockerClient.createContainerCmd(imageName)
    .withName(containerName)
    .withPortBindings(new PortBinding(
        new Binding(null, null, hostPort),
        new ExposedPort(containerPort)))
    .withBinds(new Bind(volumeHostPath, new Volume(volumeContainerPath)))
    .exec();

在上述代码中,imageName表示要使用的镜像的名称,containerName表示要创建的容器的名称。hostPortcontainerPort分别表示主机端口和容器端口,用于进行端口映射。volumeHostPathvolumeContainerPath表示主机路径和容器路径,用于挂载卷。其中,CreateContainerResponse对象,包含了有关新创建容器的信息,比如容器的ID、名称等。以便接下来的启动停止容器等操作

  • withName(containerName):为容器指定一个名称。
  • withPortBindings(portBindings):指定容器的端口绑定。portBindings是一个PortBinding对象,用于将主机端口映射到容器内的端口。
  • withBinds(bindings):指定容器的卷绑定。bindings是一个Bind对象,用于将主机的目录或卷挂载到容器内的路径。

启动容器

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

停止和删除容器

dockerClient.stopContainerCmd(container.getId()).exec();
dockerClient.removeContainerCmd(container.getId()).exec();

在上述代码中,container.getId()获取到的是容器的ID。文章来源地址https://www.toymoban.com/news/detail-750665.html

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

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

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

相关文章

  • java集成Docker-java实现远程镜像、容器创建,服务发布

           目前项目中需要实现水利机理模型的容器化部署,使用docker实现模型容器化部署操作,互相隔离,就是一个不错的方案。 实现docker远程连接、远程安全连接 构建镜像、加载镜像、删除镜像、拉取镜像、创建容器、启动容器、停止容器、删除容器。 执行模型运行命令

    2024年02月04日
    浏览(59)
  • 解决requests.exceptions.ProxyError: HTTPSConnectionPool(host=‘api.github.com‘, port=443): Max retries

    一般来说,出现这种错误的原因可能是以下之一: 代理设置错误 : 你的计算机或网络环境可能配置了代理服务器,但代理服务器设置可能不正确。你需要检查你的代理设置是否正确,并确保它们与你的网络环境相匹配。 代理服务器不可用 : 如果代理服务器无法访问或不可用

    2024年02月05日
    浏览(53)
  • 大数据学习:使用Java API操作HDFS

    一、创建Maven项目 二、添加依赖 在 pom.xml 文件里添加 hadoop 和 junit 依赖 三、创建日志属性文件 在 resources 目录里创建 log4j.properties 文件 代码 四、在HDFS上创建文件 在 /ied01 目录创建 hadoop2.txt 文件 创建 net.xxr.hdfs 包,在包里创建 CreateFileOnHDFS 类 编写 create1() 方法 结果 利用H

    2024年02月08日
    浏览(39)
  • ZooKeeper Java API 使用教程 - 同步与异步操作示例

    本教程详细介绍了如何使用ZooKeeper Java API进行节点数据的同步和异步获取。通过具体代码示例,展示了如何连接ZooKeeper服务器,获取子节点列表,以及如何处理节点数据变化的事件。

    2024年04月22日
    浏览(35)
  • 大数据上课笔记之使用Java API操作HDFS

    目录 一、HDFS Java API的了解 1、HDFS常见类与接口  二、编写Java程序访问HDFS 1、在IEDA上创建Maven项目 2、添加相关依赖 3、创建日志属性文件 4、启动集群HDFS服务 5、在HDFS上创建文件  6、写入HDFS文件  7、读取HDFS文件  8、重命名目录或文件 9、显示文件列表  9.1、显示指定目录

    2024年02月07日
    浏览(38)
  • 使用gitclone.com加速github访问

    有时候github访问太慢或者直接访问不了,可以使用gitclone加速,官网URL:https://gitclone.com/ 按照官方描述,有三种方式使用 个人建议直接使用Method 1,比较方便,也就是说比如原本的git clone的指令是 现在可以使用gitclone加速, 实测加速明显,速度飞快

    2024年02月16日
    浏览(52)
  • 【ES使用】Java API操作ES宝典(8.x版本)

    大家好,我是老坛。  本篇文章全部代码资源请关注同名公众号:老坛聊开发 回复:\\\"8.x模板\\\" 即可获取 Elasticsearch是一个分布式的RESTful 风格的搜索和数据分析引擎,它使用方便,查询速度快,因此也被越来越多的开发人员使用。 在Java项目中,使用ES的场景也十分常见。除了

    2024年02月02日
    浏览(44)
  • 使用Java API对HDFS进行如下操作:文件的创建、上传、下载以及删除等操作

    HDFS-JAVA接口:上传文件 将一个本地文件(无具体要求)上传至HDFS中的/hdfs-test路径下(如无此路径,新建一个)。 新建路径:   首先在路径/usr/test/ 下新建test.txt,指令为:/usr/test/test.txt,然后进行上传操作。      2.HDFS-JAVA接口:创建文件 在HDFS中的/hdfs-test路径下新建一个da

    2024年02月07日
    浏览(53)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文档、查询操作(二)

    Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    浏览(91)
  • Minio入门系列【5】JAVA集成Minio之存储桶操作API使用详解

    官方文档:https://min.io/docs/minio/kubernetes/upstream/index.html?ref=docs-redirect SDK:https://github.com/minio/minio-java Minio 提供了多种语言的SDK,比如java、go、python等。JAVA开发平台可以选择JS和java SDK,也就是前端和后端都可以直接集成minio。 每个OSS的用户都会用到上传服务。Web端常见的上传

    2024年02月05日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包