도커 리포지토리 이름을 변경하거나 이미지 이름을 변경하는 방법은 무엇입니까?
이미지의 리포지토리 이름을 변경하려고 합니다.
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
server latest d583c3ac45fd 26 minutes ago 685.5 MB
그래서 이름을 바꾸고 싶습니다.server
와 비슷한 정도로myname/server
:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
myname/server latest d583c3ac45fd 26 minutes ago 685.5 MB
어떻게 해야 하나요?
docker image tag server:latest myname/server:latest
또는
docker image tag d583c3ac45fd myname/server:latest
태그는 전체 이미지 이름에 대한 사람이 읽을 수 있는 별칭입니다(d583c3ac45fd...
).
따라서 원하는 만큼 동일한 이미지와 연결할 수 있습니다.이전 이름이 마음에 들지 않으면 태그를 다시 지정한 후 제거할 수 있습니다.
docker rmi server
그것은 단지 그것을 제거할 것입니다.alias/tag
.부터d583c3ac45fd
다른 이름이 있으면 실제 이미지는 삭제되지 않습니다.
간단한 방법으로 다음을 실행할 수 있습니다.
docker tag d58 myname/server:latest
어디에d58
이미지 ID의 처음 3자를 나타냅니다. 이 경우에는 이 문자만 있으면 됩니다.
마지막으로 다음과 같이 이전 이미지를 제거할 수 있습니다.
docker rmi server
최근에 저는 도커 레지스트리(docker.mycompany.com )에서 아티팩트리(docker.artifactory.mycompany.com )로 일부 이미지를 마이그레이션해야 했습니다.
docker pull docker.mycompany.com/something/redis:4.0.10
docker tag docker.mycompany.com/something/redis:4.0.10 docker.artifactory.mycompany.com/something/redis:4.0.10
docker push docker.artifactory.mycompany.com/something/redis:4.0.10
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
도커는 이미지 이름 변경 기능을 제공하지 않으므로 다음은 세 가지 명령으로 도커 이미지 이름을 효과적으로 변경하는 방법입니다.
docker pull UglyOldTag
docker tag UglyOldTag ShinyNewTag
docker rmi UglyOldTag
참고: 이는 새 태그를 추가하고 이전 태그를 제거하는 것입니다.위에서 언급한 것처럼 태그는 실제로 이미지 ID 필드에 대한 니모닉 별칭 또는 포인터일 뿐입니다.만약 그것이 충분히 혼란스럽지 않다면, 도커 API와 문서는 종종 버전을 참조하기 위해 "태그"를 사용합니다(즉, ":" 뒤에 오는 이미지 이름의 부분, MyImage**:**latest에서처럼).
그러나 태그 이름을 변경할 수 있는 곳은 오타 및 잘못된 이름뿐이 아닙니다.예를 들어 Amazon의 ECR을 사용하는 경우 이미지를 체크인하려면 먼저 전체 ARN을 태그로 할당해야 합니다.이것은 여러분의 꼬리표가 크고 못생겼다는 것을 의미합니다!
참고: 아래의 예를 볼 때, Amazon과 DockerHub는 Docker 이미지의 각 계층을 "리포지토리"라고 지칭한다는 것을 기억하는 것이 유용합니다.
# Create the ECR 'repository' for the image
aws ecr create-repository \
--repository-name myFavoriteTag \
--image-scanning-configuration scanOnPush=true \
--region myFavoriteRegion
docker tag myFavoriteTag:latest aws_account_id.dkr.ecr.aws_region.amazonaws.com/myFavoriteTag:latest
docker push aws_account_id.dkr.ecr.aws_region.amazonaws.com/myFavoriteTag:latest
그래서, 추악함을 깨끗하게 하는 빠른 방법은
ECR_BASE==aws_account_id.dkr.ecr.aws_region.amazonaws.com
docker pull ${ECR_BASE}/myFavoriteTag
docker tag ${ECR_BASE}/myFavoriteTag myFavoriteTag
docker rmi ${ECR_BASE}/myFavoriteTag
docker run myFavoriteTag
물론 ECR에 다시 확인하려면 추악함을 다시 착용해야 합니다.
docker tag ${ECR_BASE}/myFavoriteTag:latest
간단하죠.
다음을 사용하여 이미지 이름(또는 리포지토리 이름) 변경IMAGE ID
:
docker tag <IMAGE ID> <NAME YOU WANT TO GIVE>
docker image tag #imageId myname/server:latest
이것은 나에게 효과가 있습니다.
이미지 이름을 변경하는 방법?
이미지를 복사하거나 기존 이미지의 이름을 바꾸려면 기존 태그 또는 리포지토리에서 새 태그 또는 리포지토리를 만들기만 하면 됩니다.이 작업은 docker tag 명령을 사용하여 수행할 수 있습니다.
syntax/command: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
#=> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-git latest c0aaaba33a60 18 hours ago 208MB
docker tag ubuntu-git:latest ubuntu-git:latest-new-tag
#=> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-git latest c0aaaba33a60 18 hours ago 208MB
ubuntu-git latest-new-tag c0aaaba33a60 18 hours ago 208MB
2022년 현재 상위 답변 중 특정 리포지토리의 태그를 다른 리포지토리로 마이그레이션하기 위해 특정 리포지토리의 모든 태그를 쉽게 "이름 변경"할 수 있는 방법을 명시적으로 설명하는 것은 없습니다.Bensuperpc의 답변은 제가 GitLab 레지스트리를 Quay로 옮기는 데 도움을 준 하나의 라이너로 저를 이끌었습니다.
먼저, 필요한 경우 다음을 사용하여 모든 이미지를 한 번에 풀링할 수 있습니다.
docker pull oldregistry.example.com/my-image --all-tags
하나의 줄:
docker image list oldregistry.example.com/my-image --format "{{.Tag}}" | xargs -r -P$(nproc) -I {} docker image tag oldregistry.example.com/my-image:{} newregistry.example.com/my-image:{}
마지막으로:
docker push newregistry.example.com/my-image --all-tags
사용하는 것을 잊지 마십시오.docker login
필요한 경우 풀/풀 명령 앞에 표시됩니다.
승인된 답변은 단일 이름 변경에 유용하지만 동일한 리포지토리를 가진 여러 이미지의 이름을 한 번에 변경하고 이전 이미지를 제거하는 방법이 있습니다.
양식의 이전 이미지가 있는 경우:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
old_name/image_name_1 latest abcdefghijk1 5 minutes ago 1.00GB
old_name/image_name_2 latest abcdefghijk2 5 minutes ago 1.00GB
원하는 것은 무엇입니까?
new_name/image_name_1
new_name/image_name_2
이것을할 수 .OLD_REPONAME
,NEW_REPONAME
,그리고.TAG
해당하는 경우):
OLD_REPONAME='old_name'
NEW_REPONAME='new_name'
TAG='latest'
# extract image name, e.g. "old_name/image_name_1"
for image in $(docker images | awk '{ if( FNR>1 ) { print $1 } }' | grep $OLD_REPONAME)
do \
OLD_NAME="${image}:${TAG}" && \
NEW_NAME="${NEW_REPONAME}${image:${#OLD_REPONAME}:${#image}}:${TAG}" && \
docker image tag $OLD_NAME $NEW_NAME && \
docker rmi $image:${TAG} # omit this line if you want to keep the old image
done
아래의 파이썬 코드는 여러 이미지의 이름을 바꾼 다음 새 리포지토리로 다시 밀어넣습니다.python3.6으로 작성된 도커 저장소 마이그레이션 코드입니다.
import docker
client = docker.from_env()
docker_api = docker.APIClient()
images = client.images.list()
for image in images:
try:
if image.tags[0] and '<old repository>' in image.tags[0]:
version = image.tags[0].split("/")[-1]
type(version)
print("version is {}".format(version))
docker_api.tag(image.tags[0],"<new repository>/{}".format(version))
except Exception as Ex:
print(image)
print(Ex)
그런 다음 셸 스크립트 아래로 이미지를 푸시합니다.
docker images | grep <new repository> | awk '{print $1":"$2}' | xargs -L1 docker push
이미지의 이름을 바꾸려면 새 태그를 지정한 다음 'rmi' 명령을 사용하여 이전 태그를 제거합니다.
도커 태그 $ 도커 rmi
'rmi'는 "이미지 제거"를 의미하기 때문에 이 두 번째 단계는 무섭습니다.그러나 다른 태그가 있는 경우 도커는 이미지를 실제로 제거하지 않습니다.즉, 도커 rmi를 사용하여 즉시 이 작업을 수행하면 실제로 이미지가 제거됩니다(이미지에 다른 태그가 할당되지 않은 경우).
다음 명령을 사용하여 여러 리포지토리/태그 태그를 변경할 수 있습니다.
docker images --filter=reference='server' --format='{{.Repository}}:{{.Tag}}' | xargs -r -P$(nproc) -I {} docker image tag {} myname/{}
도커 설명서 https://docs.docker.com/engine/reference/commandline/rename/ 에 따름
docker rename CONTAINER NEW_NAME
언급URL : https://stackoverflow.com/questions/25211198/docker-how-to-change-repository-name-or-rename-image
'itsource' 카테고리의 다른 글
iPhone HTML5 비디오 재생 버튼 숨기기 (0) | 2023.08.10 |
---|---|
inject()는 주입 컨텍스트에서 호출되어야 합니다. (0) | 2023.08.10 |
오라클 패키지에서 기본값을 정의할 위치 (0) | 2023.08.10 |
Android: ScrollView 내부의 View가 보이는지 확인하는 방법은 무엇입니까? (0) | 2023.08.10 |
기본 키에 대한 SQL 데이터 유형 - SQL 서버? (0) | 2023.08.10 |