2017-06-19 289 views
1

在探索docker-client api(java)時,需要什麼證書才能建立到vm上運行的docker守護程序的連接。使用docker-client api將圖像推送到碼頭註冊表

我發現它的代碼在網上:

{ 
// 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

我打算做的是我的主節點上運行的訪問泊塢窗守護進程(部署通過magnum api)並將我的Java應用程序docker-image推送到註冊表中,以便我可以使用這些映像在集羣上創建pod。

我不確定還需要做些什麼,因爲我是新手。

回答

0

我做了類似的事情,在遠程docker守護進程上創建映像,並將其推送到存儲庫並進一步生成容器。我用docker-java客戶端,它工作正常。您可能想要通過他們的維基,通常情況下issues頁面對我非常有幫助。

基本步驟:

  1. 基本上你需要創建一個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(); 
    } 
    
  2. 然後,你需要創建一個DockerClient

    public DockerClient dockerClient() { 
        DockerClient dockerClient = DockerClientBuilder.getInstance(dockerClientConfig()) 
         .withDockerCmdExecFactory(nettyDockerCmdExecFactory()) 
         .build(); 
        return dockerClient; 
    } 
    
  3. 現在,您可以撥打電話,以創建圖像,圖像推, 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(); 
    

這應該足以讓你開始。

相關問題