在探索 docker-client api (java) 时,设置与虚拟机上运行的 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 https://github.com/spotify/docker-client
我打算做的是访问在我的主节点上运行的 docker-daemon(通过 magnum api 部署)并将我的 java 应用程序 docker-image 推送到注册表中,以便我可以使用这些图像在集群上创建 pod。
我不确定还需要做什么,因为我对此很陌生。
我做了类似的事情,在远程 Docker 守护进程上创建图像并将其推送到存储库并进一步生成容器。我用了docker-java https://github.com/docker-java/docker-java客户端并且工作正常。你可能想浏览他们的维基,issues https://github.com/docker-java/docker-java/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;
}
-
现在您已准备好调用以创建图像、推送图像,
启动容器等
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();
这应该足以让您开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)