[docker] Docker에서 이름이 지정된 최신 태그를 만드는 방법은 무엇입니까?

태그를 지정하려는 이미지가 있다고 가정합니다 0.10.24(제 경우에는 Node.js 0.10.24를 포함하는 이미지입니다). Dockerfile을 docker build사용하고 -t매개 변수를 사용하여 태그를 제공 하여 해당 이미지를 작성했습니다 .

언젠가 해당 이미지의 추가 버전이있을 것으로 예상되므로 다른 태그 이름으로 프로세스를 다시 실행할 것입니다.

여태까지는 그런대로 잘됐다. 이것은 훌륭하고 훌륭하게 작동하며 모든 것이 잘됩니다.

그러나 이것이 문제가 시작되는 곳이며 항상 최신 이미지 태그 광고를 latest추가 하고 싶습니다 . 따라서 동일한 이미지에 두 개의 이름을 지정해야한다고 생각합니다.

어떻게해야합니까? docker build정확히 동일한 버전에서 다시 다시 실행해야 합니까?하지만 이번에는 다른 태그를 사용하십시오. 더 나은 옵션이 있습니까?



답변

이미지를 만들 때 여러 개의 태그를 가질 수 있습니다.

$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

참조 : https://docs.docker.com/engine/reference/commandline/build/#tag-image-t


답변

이미지가 있으면 사용할 수 있습니다

$ docker tag <image> <newName>/<repoName>:<tagName>
  1. creack / node : latest로 이미지를 빌드하고 태그를 지정하십시오.

    $ ID=$(docker build -q -t creack/node .)
    
  2. 새 태그 추가

    $ docker tag $ID creack/node:0.10.24
    
  3. 이것을 사용하고 빌드에서 -t 부분을 건너 뛸 수 있습니다.

    $ docker tag $ID creack/node:latest
    

답변

여기 내 bash 스크립트가 있습니다.

docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest

그런 다음 동일한 버전을 다시 빌드하면 태그가없는 이미지를 제거 할 수 있습니다

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

링크

또는

docker rmi $(docker images | grep "^<none>" | tr -s " " | cut -d' ' -f3 | tr '\n' ' ')

또는

정리 명령 :

Docker 1.13에는 정리 명령이 도입되었습니다. 사용하지 않는 모든 컨테이너, 이미지, 네트워크 및 볼륨을 제거하려면

docker system prune

또는 개별적으로 :

docker container prune
docker image prune
docker network prune
docker volume prune


답변

ID=$(docker build -t creack/node .)ID빌드의 출력이 포함되므로 나에게는 효과가 없습니다 .

그래서 나는이 작은 BASH 스크립트를 사용하고 있습니다 :

#!/bin/bash

set -o pipefail

IMAGE=...your image name...
VERSION=...the version...

docker build -t ${IMAGE}:${VERSION} . | tee build.log || exit 1
ID=$(tail -1 build.log | awk '{print $3;}')
docker tag $ID ${IMAGE}:latest

docker images | grep ${IMAGE}

docker run --rm ${IMAGE}:latest /opt/java7/bin/java -version


답변

다음 에서 IDgrep하십시오docker images .

docker build -t creack/node:latest .
ID="$(docker images | grep 'creak/node' | head -n 1 | awk '{print $3}')"
docker tag "$ID" creack/node:0.10.24
docker tag "$ID" creack/node:latest

임시 파일이 필요 없으며 전체 빌드 출력을 제공 합니다 . 여전히 /dev/null또는 로그 파일로 리디렉션 할 수 있습니다 .


답변

아론의 대답의 변형. 임시 파일없이 sed 사용

#!/bin/bash
VERSION=1.0.0
IMAGE=company/image
ID=$(docker build  -t ${IMAGE}  .  | tail -1 | sed 's/.*Successfully built \(.*\)$/\1/')

docker tag ${ID} ${IMAGE}:${VERSION}
docker tag -f ${ID} ${IMAGE}:latest


답변