首先需要将放开docke的2375端口,提供docker外部访问
1、编辑docker文件:/usr/lib/systemd/system/docker.service
在ExecStart中增加 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock
2、刷新配置文件,重启docker
systemctl daemon-reload
systemctl restart docker
3、在浏览器中输入http://ip:2375/info,返回docker信息,即端口已经开放
4、接下来在java项目的pom文件中引用Docker-java包:
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.1.5</version>
</dependency>
操作镜像的代码示例:
public class DockerClientService {
public static DockerClient connectDocker(){
DockerClient dockerClient = DockerClientBuilder.getInstance("tcp://127.0.0.1:2375/").build();
Info info = dockerClient.infoCmd().exec();
System.out.println("docker的环境信息如下:=================");
System.out.println(info);
return dockerClient;
}
public static BuildImageResultCallback callback = new BuildImageResultCallback() {
@Override
public void onNext(BuildResponseItem item) {
System.out.println("" + item);
super.onNext(item);
}
};
public static PushImageResultCallback push = new PushImageResultCallback() {
@Override
public void onNext(PushResponseItem item) {
System.out.println("id:" + item.getId() +" status: "+item.getStatus());
super.onNext(item);
}
@Override
public void onComplete() {
System.out.println("Image pushed completed!");
super.onComplete();
}
};
//镜像仓库配置
public static AuthConfig authConfig = new AuthConfig()
.withUsername("registryUserName")
.withPassword("registryPassword")
.withRegistryAddress("registry.local");
public static void main(String[] args) throws IOException {
DockerClient dockerClient = connectDocker();
//docker build
File file = new File("C:/Users/Administrator/Desktop/postgresDockerFile");
dockerClient.buildImageCmd(file).withTag("registry.local/pgsql:0.0.1").exec(callback).awaitImageId();
//docker save
SaveImageCmd saveImage = dockerClient.saveImageCmd("data-front").withTag("v11");
InputStream input = saveImage.exec();
writeToLocal("C:/Users/Administrator/Desktop/data-front",input);
//docker tag
dockerClient.tagImageCmd("postgres:9.6","registry.local/postgres","9.6").exec();
//docker push
dockerClient.pushImageCmd("registry.local/postgres:9.6").withAuthConfig(authConfig).exec(push).awaitSuccess();
//docker load
File dockerImageFile = new File("C:/Users/Administrator/Desktop/data-front");
InputStream in = new FileInputStream(dockerImageFile);
dockerClient.loadImageCmd(in).exec();
//docker rmi
dockerClient.removeImageCmd("registry.local/data-front:0.0.1").exec();
//image list
List<Image> exec = dockerClient.listImagesCmd().exec();
}
/**
* 将InputStream写入本地文件
* @param destination 写入本地目录
* @param input 输入流
* @throws IOException IOException
*/
public static void writeToLocal(String destination, InputStream input)
throws IOException {
int index;
byte[] bytes = new byte[1024];
FileOutputStream downloadFile = new FileOutputStream(destination);
while ((index = input.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
input.close();
downloadFile.close();
}
}