itsource

도커 리포지토리 이름을 변경하거나 이미지 이름을 변경하는 방법은 무엇입니까?

mycopycode 2023. 8. 10. 18:46
반응형

도커 리포지토리 이름을 변경하거나 이미지 이름을 변경하는 방법은 무엇입니까?

이미지의 리포지토리 이름을 변경하려고 합니다.

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

반응형