AWS SDK로 PushImageCmd 사용하기
AWS SDK로 PushImageCmd 사용하기
다음 코드 예제는 AWS SDK에서 PushImageCmd를 사용하는 방법을 보여줍니다.
출처: 문서
본문
Java
SDK for Java 2.x
참고: GitHub에 더 많은 내용이 있습니다. 전체 예제를 찾아 설정하고 실행하는 방법은 AWS Code Examples Repository에서 확인하세요.
/**
* Pushes a Docker image to an Amazon Elastic Container Registry (ECR) repository.
*
* @param repoName the name of the ECR repository to push the image to.
* @param imageName the name of the Docker image.
*/
public void pushDockerImage(String repoName, String imageName) {
System.out.println("Pushing " + imageName + " to Amazon ECR will take a few seconds.");
CompletableFuture<AuthConfig> authResponseFuture = getAsyncClient().getAuthorizationToken()
.thenApply(response -> {
String token = response.authorizationData().get(0).authorizationToken();
String decodedToken = new String(Base64.getDecoder().decode(token));
String password = decodedToken.substring(4);
DescribeRepositoriesResponse descrRepoResponse = getAsyncClient().describeRepositories(b -> b.repositoryNames(repoName)).join();
Repository repoData = descrRepoResponse.repositories().stream().filter(r -> r.repositoryName().equals(repoName)).findFirst().orElse(null);
assert repoData != null;
String registryURL = repoData.repositoryUri().split("/")[0];
AuthConfig authConfig = new AuthConfig()
.withUsername("AWS")
.withPassword(password)
.withRegistryAddress(registryURL);
return authConfig;
})
.thenCompose(authConfig -> {
DescribeRepositoriesResponse descrRepoResponse = getAsyncClient().describeRepositories(b -> b.repositoryNames(repoName)).join();
Repository repoData = descrRepoResponse.repositories().stream().filter(r -> r.repositoryName().equals(repoName)).findFirst().orElse(null);
getDockerClient().tagImageCmd(imageName + ":latest", repoData.repositoryUri() + ":latest", imageName).exec();
try {
getDockerClient().pushImageCmd(repoData.repositoryUri()).withTag("echo-text").withAuthConfig(authConfig).start().awaitCompletion();
System.out.println("The " + imageName + " was pushed to ECR");
} catch (InterruptedException e) {
throw (RuntimeException) e.getCause();
}
return CompletableFuture.completedFuture(authConfig);
});
authResponseFuture.join();
}
API 세부 정보는 AWS SDK for Java 2.x API Reference의 PushImageCmd를 참조하세요.
Kotlin
SDK for Kotlin
참고: GitHub에 더 많은 내용이 있습니다. 전체 예제를 찾아 설정하고 실행하는 방법은 AWS Code Examples Repository에서 확인하세요.
/**
* Pushes a Docker image to an Amazon Elastic Container Registry (ECR) repository.
*
* @param repoName the name of the ECR repository to push the image to.
* @param imageName the name of the Docker image.
*/
suspend fun pushDockerImage(
repoName: String,
imageName: String,
) {
println("Pushing $imageName to $repoName will take a few seconds")
val authConfig = getAuthConfig(repoName)
EcrClient.fromEnvironment { region = "us-east-1" }.use { ecrClient ->
val desRequest =
DescribeRepositoriesRequest {
repositoryNames = listOf(repoName)
}
val describeRepoResponse = ecrClient.describeRepositories(desRequest)
val repoData =
describeRepoResponse.repositories?.firstOrNull { it.repositoryName == repoName }
?: throw RuntimeException("Repository not found: $repoName")
val tagImageCmd = getDockerClient()?.tagImageCmd("$imageName", "${repoData.repositoryUri}", imageName)
if (tagImageCmd != null) {
tagImageCmd.exec()
}
val pushImageCmd =
repoData.repositoryUri?.let {
dockerClient?.pushImageCmd(it)
// ?.withTag("latest")
?.withAuthConfig(authConfig)
}
try {
if (pushImageCmd != null) {
pushImageCmd.start().awaitCompletion()
}
println("The $imageName was pushed to Amazon ECR")
} catch (e: IOException) {
throw RuntimeException(e)
}
}
}
API 세부 정보는 AWS SDK for Kotlin API reference의 PushImageCmd를 참조하세요.
AWS SDK 개발자 가이드와 코드 예제의 전체 목록은 AWS SDK로 Amazon ECR 사용하기를 참조하세요. 이 주제에는 시작하기 정보와 이전 SDK 버전에 대한 세부 정보도 포함되어 있습니다.