Перенос изображений в реестр 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, и он работает нормально. Возможно, вы захотите просмотреть их вики, страница вопросов, как обычно, оказалась для меня очень полезной.
Основные шаги:
В основном вам нужно создать
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; }
Теперь вы готовы совершать звонки, чтобы создать 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();
Этого должно быть достаточно, чтобы вы начали.