淺析Java如何使用docker-java庫操作DockerAPI


  除了 jnr-unixsocket,后來我發現有一個 Java Docker 的庫使用還挺普遍的,就是 docker-java,github 有 2k 多star,使用也挺普遍的,一搜很多資料文章。

一、docker-java 配置

1、版本支持

<dependency>
      <groupId>com.github.docker-java</groupId>
      <artifactId>docker-java</artifactId>
      <!-- use latest version https://github.com/docker-java/docker-java/releases -->
      <version>3.X.Y</version>
</dependency>

2、配置Docker環境

  系統的可配置項及默認值如下:

  • DOCKER_HOST The Docker Host URL, e.g. tcp://localhost:2375 or unix:///var/run/docker.sock
  • DOCKER_TLS_VERIFY enable/disable TLS verification (switch between http and https protocol)
  • DOCKER_CERT_PATH Path to the certificates needed for TLS verification
  • DOCKER_CONFIG Path for additional docker configuration files (like .dockercfg)
  • api.version The API version, e.g. 1.23.
  • registry.url Your registry's address.
  • registry.username Your registry username (required to push containers).
  • registry.password Your registry password.
  • registry.email Your registry email.

  There are three ways to configure, in descending order of precedence:

編程方式配置

DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://my-docker-host.tld:2376") .withDockerTlsVerify(true) .withDockerCertPath("/home/user/.docker/certs") .withDockerConfig("/home/user/.docker") .withApiVersion("1.30") // optional
    .withRegistryUrl("https://index.docker.io/v1/") .withRegistryUsername("dockeruser") .withRegistryPassword("ilovedocker") .withRegistryEmail("dockeruser@github.com") .build(); DockerClient docker = DockerClientBuilder.getInstance(config).build();

通過Properties (docker-java.properties)

DOCKER_HOST=tcp://localhost:2376
DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=/home/user/.docker/certs DOCKER_CONFIG=/home/user/.docker api.version=1.23 registry.url=https://index.docker.io/v1/
registry.username=dockeruser registry.password=ilovedocker registry.email=dockeruser@github.com

通過System Properties

java -DDOCKER_HOST=tcp://localhost:2375 -Dregistry.username=dockeruser pkg.Main

通過 Environment

export DOCKER_HOST=tcp://localhost:2376
export DOCKER_TLS_VERIFY=1 export DOCKER_CERT_PATH=/home/user/.docker/certs export DOCKER_CONFIG=/home/user/.docker

3、代碼測試

    DockerClient dockerClient = createClient(); // docker info
    Info info = dockerClient.infoCmd().exec(); System.out.print(info); // 搜索鏡像
    List<SearchItem> dockerSearch = dockerClient.searchImagesCmd("busybox").exec(); System.out.println("Search returned" + dockerSearch.toString()); // pull
    dockerClient.pullImageCmd("busybox:latest").exec(new ResultCallback<PullResponseItem>() { public void onStart(Closeable closeable) { } public void onNext(PullResponseItem object) { System.out.println(object.getStatus()); } public void onError(Throwable throwable) { throwable.printStackTrace(); } public void onComplete() { System.out.println("pull finished"); } public void close() throws IOException { } }); // 創建container 並測試 // create
    CreateContainerResponse container = dockerClient.createContainerCmd("busybox") .withCmd("/bin/bash") .exec(); // start
 dockerClient.startContainerCmd(container.getId()).exec(); dockerClient.stopContainerCmd(container.getId()).exec(); dockerClient.removeContainerCmd(container.getId()).exec(); EventsResultCallback callback = new EventsResultCallback() { @Override public void onNext(Event event) { System.out.println("Event: " + event); super.onNext(event); } }; dockerClient.eventsCmd().exec(callback).awaitCompletion().close();

  以上轉載於:docker-java Docker 的 java API —— https://cloud.tencent.com/developer/article/1432721

二、如何操作 docker

1、第一步,開啟 docker 遠程服務。見這篇博客:淺析如何開啟docker遠程連接服務以便讓Jenkins或Java等應用連接docker

  也可以看這篇博客:java使用dockerAPI (一) ——  https://blog.csdn.net/qq_43323720/article/details/104318121

2、Java 使用 dockerAPI 的安全連接方法,來保護對應端口及服務器的安全。

  看這篇博客:java使用dockerAPI (二)  ——  https://blog.csdn.net/qq_43323720/article/details/104318343

3、Java中使用dockerAPI的工具類封裝以及常用的操作

  看這篇博客:java使用dockerAPI (三)  ——  https://blog.csdn.net/qq_43323720/article/details/104327315


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM