Перенос изображений в реестр Docker с помощью API Docker-клиента

Изучая API-интерфейс docker-client (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

Я собираюсь получить доступ к docker-daemon, работающему на моем главном узле (развернутом через magnum api), и вставить свой docker-образ java-приложений в реестр, чтобы я мог создавать модули в моем кластере, используя эти образы.

Я не уверен, что еще нужно сделать, поскольку я новичок в этом.

1 ответ

Возможно, вы могли бы просто использовать основные API Jib, которые являются простой библиотекой Java, которая не нуждается в каких-либо docker установлено, чтобы построить + нажать изображение!

Прочтите этот пост в блоге Google, чтобы узнать о нем больше.

Я сделал нечто подобное, создал образы на удаленном Docker-демоне и отправил его в хранилище, а затем создал контейнеры. Я использовал клиент Docker-Java, и он работает нормально. Возможно, вы захотите просмотреть их вики, страница вопросов, как обычно, оказалась для меня очень полезной.

Основные шаги:

  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. Теперь вы готовы совершать звонки, чтобы создать Image, нажать Image, 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();
    

Этого должно быть достаточно, чтобы вы начали.

Другие вопросы по тегам