[探索docker-client api(java)时,建立与vm上运行的docker守护程序的连接时确切需要哪些证书。
我在网上找到的代码:
{
// Create a client based on DOCKER_HOST and DOCKER_CERT_PATH env vars
final DockerClient docker = DefaultDockerClient.fromEnv().build();
// Pull an image
docker.pull("busybox");
}
以上示例的链接位于:https://github.com/spotify/docker-client
[我打算做的是访问在主节点上运行的docker-daemon(通过magnum api部署),并将Java应用程序docker-image推送到注册表中,以便我可以使用这些映像在集群上创建pod。
我不知道还需要做些什么,因为我是新来的。
我做了类似的事情,在远程docker守护程序上创建了映像,并将其推送到存储库中,并进一步生成了容器。我使用了docker-java客户端,并且工作正常。您可能想要浏览他们的Wiki,照常证明issues页面对我很有帮助。
基本步骤:
基本上,您需要创建一个DockerClientConfig
类似于:
public DockerClientConfig dockerClientConfig() {
return DefaultDockerClientConfig.createDefaultConfigBuilder()
.withDockerHost("IP_where_docker_daemon_is_running_with_port")
.withDockerTlsVerify("Transport_Layer_Security_accepts_Boolean")
.withDockerCertPath("If_tls_is_true")
.build();
}
然后您需要创建一个DockerClient
public DockerClient dockerClient() {
DockerClient dockerClient = DockerClientBuilder.getInstance(dockerClientConfig())
.withDockerCmdExecFactory(nettyDockerCmdExecFactory())
.build();
return dockerClient;
}
现在您可以调用创建图像,推送图像,startContainer等。>
File baseDir = new File(appImage.getSourceUri());
BuildImageResultCallback callback = new BuildImageResultCallback(){
@Override
public void onNext(BuildResponseItem item){
System.out.println("It's done - > " + item);
super.onNext(item);
}
};
PushImageResultCallback pushImageResultCallback = new PushImageResultCallback(){
@Override
public void onNext(PushResponseItem item){
System.out.println("It's done too - >" + item);
super.onNext(item);
}
};
dockerClient.buildImageCmd(baseDir).withTag(appImage.getRegistryEndpoint()+"/apps/test:" + appImage
.getName()).exec(callback).awaitImageId();
dockerClient.listImagesCmd().withShowAll(true).exec();
AuthConfig authConfig = new AuthConfig().withUsername("admin").withPassword("admin")
.withRegistryAddress("http://some_ip/v2/");
dockerClient.pushImageCmd(appImage.getName())
.withAuthConfig(authConfig)
.withName(appImage
.getRegistryEndpoint()+ "/apps/test")
.withTag(appImage.getName())
.exec(pushImageResultCallback).awaitSuccess();
CreateContainerResponse containerResponse = dockerClient.createContainerCmd(appImage
.getRegistryEndpoint()+ "/apps/test:" + appImage.getName())
.exec();
dockerClient.startContainerCmd(containerResponse.getId()).exec();
这应该足以让您入门。
也许您也可以简单地使用Jib core APIs,这是一个简单的Java库,不需要安装任何docker
即可构建+推送图像!
请阅读此链接upload-docker-image-documentation,它会告诉您docker-image包含哪些内容,以及即使没有docker-deamon也可以将图像上传到docker-registry的步骤。