Java API 操作Docker示例

简介: Java API 操作Docker示例

0x00 教程内容


  1. 安装并配置Docker
  2. Java API 操作Docker
  3. 检验

说明:本教程最好需要有点Docker基础与编程基础,可以参考本博客的其他内容进行学习。


0x01 安装并配置Docker


1. 安装Docker

(1)不清楚的可以看我另一篇教程=> D001.5 Docker入门(超级详细基础篇)


安装位置直达=> 传送门


2. 配置Docker开放2375端口

默认情况下,Docker通过守护进程Unix socket(/var/run/docker.sock)来进行本地进程通信,但此进程只能在本地使用Docker客户端或者Docker API方式进行操作。如果想在其他主机上操作Docker主机,就需要让Docker守护进程打开一个HTTP Socket,以实现远程的通信。


vim /usr/lib/systemd/system/docker.service


加上相应的内容:


ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock


注意:如果有防火墙,也要放开2375端口。


image.png


修改好后,务必要重启Docker:

systemctl daemon-reload
systemctl restart docker


以下命令可以查看是否配置好,并且可以看到2375端口已经被监听了:


微信图片_20220619180008.png


0x02 Java API 操作Docker


1. 引入 docker-java 项目的两种方式

(1)方式一

直接在新建的Maven项目中,添加Maven依赖即可:


<!-- https://mvnrepository.com/artifact/com.github.docker-java/docker-java -->
<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java</artifactId>
    <version>3.1.5</version>
</dependency>


(2)方式二

docker-java 安装到本地Maven中,操作如下:

1、下载 docker-java 的 github 源码(需要安装好 Git


git clone https://github.com/docker-java/docker-java.git


2、安装到本地Maven中

cd docker-java/
mvn install -Dmaven.test.skip=true


2. 新建项目并引入依赖

(1)此处我们使用第一种方式,直接在pom.xml中引入依赖的方式

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


3. 编写代码

(1)新建一个工具类 DockerClientUtils

package com.shaonaiyi.utils;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.core.DockerClientBuilder;
/**
 * @Auther: shaonaiyi@163.com
 * @Date: 2021/1/10 15:37
 * @Description: Java API实现创建Docker容器
 */
public class DockerClientUtils {
    /**
     * 连接Docker服务器
     * @return
     */
    public DockerClient connectDocker(String dockerInstance){
        DockerClient dockerClient = DockerClientBuilder.getInstance(dockerInstance).build();
        dockerClient.infoCmd().exec();
        return dockerClient;
    }
    /**
     * 创建容器
     * @param client
     * @return
     */
    public CreateContainerResponse createContainers(DockerClient client, String containerName, String imageName){
        CreateContainerResponse container = client.createContainerCmd(imageName)
                .withName(containerName)
                .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();
    }
}


(2)编程代码来测试(可以直接在DockerClientUtils里直接写main方法):

public static void main(String[] args){
    DockerClientUtils dockerClientUtils =new DockerClientUtils();
    //连接Docker服务器
    DockerClient client = dockerClientUtils.connectDocker("tcp://192.168.128.100:2375");
    //创建容器
    CreateContainerResponse container = dockerClientUtils.createContainers(client,"sny_hello","hello-world");
    //启动容器
    dockerClientUtils.startContainer(client,container.getId());
}


注意:192.168.128.100需要修改成自己的 Docker 服务器的ip地址


0x03 检验


1. 拉取镜像

(1)因为本例子是测试新建容器的API,所以,先得有镜像,我们使用hello-world的镜像(如果已经存在则不需要操作了):

docker run hello-world

image.png


2. 运行创建容器代码

(1)运行代码,则可以看到IDEA显示没有报错:

image.png


(2)查看服务器,发现已经新建了容器,如图:

image.png


至此,我们的教程就结束了。

PS:如果重复测试的话,需要先删除容器,命令如下:

docker rm sny_hello


0xFF 总结


更多参考资料

https://docs.docker.com/engine/api/sdk/

https://github.com/docker-java/docker-java

https://copyfuture.com/blogs-details/202001231456248957t5rdb0yjnpby3c


相关文章
|
1天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
4天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
21天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
94 38
|
30天前
|
JSON API 数据安全/隐私保护
淘宝评论API接口操作步骤详解,代码示例参考
淘宝评论API接口是淘宝开放平台提供的一项服务,通过该接口,开发者可以访问商品的用户评价和评论。这些评论通常包括评分、文字描述、图片或视频等内容。商家可以利用这些信息更好地了解消费者的需求和偏好,优化产品和服务。同时,消费者也可以从这些评论中获得准确的购买参考,做出更明智的购买决策。
|
1月前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
81 10
|
1月前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
56 11
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
71 6
|
1月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
2月前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
33 0