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


相关文章
|
2天前
|
Java 数据处理 索引
JAVA中的插入操作:深入解析与实现
JAVA中的插入操作:深入解析与实现
10 1
|
3天前
|
Oracle 安全 Java
JAVA用Mail发送API的方法步骤教程
使用Java和Mail发送API实现自动化邮件发送,提高效率。步骤包括:1. 安装JDK并配置JAVA_HOME,2. 添加JavaMail库(可通过Maven或官网下载)。配置邮件发送涉及邮件服务器地址、端口和认证信息。创建邮件会话、邮件消息对象,然后使用Transport发送。示例代码展示完整流程。注意处理认证失败、连接问题和邮件发送失败等常见问题。
|
3天前
|
编解码 前端开发 Java
Java网络API之Netty深度解析
Java网络API之Netty深度解析
11 0
|
3天前
|
SQL Java 数据库连接
Java JDBC连接与操作深度解析
Java JDBC连接与操作深度解析
7 1
|
3天前
|
Java API
Java 8新特性之Lambda表达式和Stream API
【5月更文挑战第31天】本文将详细介绍Java 8中的两个重要特性:Lambda表达式和Stream API。通过对比传统编程方式,我们将探讨这两个特性如何简化代码、提高可读性和性能。文章还将通过实例演示如何使用Lambda表达式和Stream API进行集合操作、过滤和转换等任务。
|
4天前
|
Java API 数据处理
Java 8中的Stream API简介及其在数据处理中的应用
【5月更文挑战第30天】 本文旨在介绍Java 8中引入的Stream API,它是一种用于处理集合的新方法。与传统的循环和迭代器相比,Stream API提供了一种更简洁、高效的方式来处理数据。文章将详细介绍Stream API的基本概念、常用操作以及在实际项目中的应用场景。
|
4天前
|
Java API
Java 8新特性之Stream API详解
【5月更文挑战第30天】本文将详细介绍Java 8中的一个重要新特性——Stream API。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,使得代码更加简洁、易读。文章将从Stream的基本概念、创建方式、常用操作以及实战案例等方面进行详细讲解,帮助读者深入理解并掌握Stream API的使用。
|
4天前
|
存储 Java
Java二维数组的声明与操作技术详解
Java二维数组的声明与操作技术详解
22 10
|
4天前
|
存储 Java 索引
Java二维数组的引用与操作技术详解
Java二维数组的引用与操作技术详解
|
5天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第29天】本文将介绍Java 8中的两个重要特性——Lambda表达式和Stream API。Lambda表达式简化了函数式编程,使得代码更加简洁易读;而Stream API则为集合操作提供了更加高效且易于理解的方法。通过本文的学习,你将掌握这两个特性的基本用法,并了解如何在实际项目中应用它们。