Java API 操作Docker示例
作者:互联网
大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。
1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员…
2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。
3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢!
博客导航跳转(请收藏):邵奈一的技术博客导航
| 公众号 | 微信 | 微博 | CSDN | 简书 |
教程目录
0x00 教程内容- 安装并配置Docker
- Java API 操作Docker
- 检验
说明:本教程最好需要有点Docker基础与编程基础,可以参考本博客的其他内容进行学习。
0x01 安装并配置Docker1. 安装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端口。
修改好后,务必要重启Docker:
systemctl daemon-reload
systemctl restart docker
以下命令可以查看是否配置好,并且可以看到2375端口已经被监听了:
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地址
!
1. 拉取镜像
(1)因为本例子是测试新建容器的API,所以,先得有镜像,我们使用hello-world
的镜像(如果已经存在则不需要操作了):
docker run hello-world
2. 运行创建容器代码
(1)运行代码,则可以看到IDEA显示没有报错:
(2)查看服务器,发现已经新建了容器,如图:
至此,我们的教程就结束了。
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
邵奈一 原创不易,如转载请标明出处,教育是一生的事业。
标签:API,java,containerId,示例,client,Docker,com,docker 来源: https://blog.51cto.com/u_12564104/2893174