除了 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
orunix:///var/run/docker.sock
DOCKER_TLS_VERIFY
enable/disable TLS verification (switch betweenhttp
andhttps
protocol)DOCKER_CERT_PATH
Path to the certificates needed for TLS verificationDOCKER_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