How to create named and latest tag in Docker?

DockerTags

Docker Problem Overview


Supposed I have an image that I want to tag as 0.10.24 (in my case it's an image containing Node.js 0.10.24). I built that image using a Dockerfile and executing docker build and by providing a tag using the -t parameter.

I expect that one day I will have additional versions of that image, so I will rerun the process, just with another tag name.

So far, so good. This works great and fine and all is well.

But, and this is where problems start, I also want to always have the newest image tagged ad latest additionally. So I guess I need to give two names to the very same image.

How do I do this? Do I really need to re-run docker build on the exact same version again, but this time use another tag, is is there a better option?

Docker Solutions


Solution 1 - Docker

You can have multiple tags when building the image:

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

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

Solution 2 - Docker

Once you have your image, you can use

$ docker tag <image> <newName>/<repoName>:<tagName>
  1. Build and tag the image with creack/node:latest

     $ ID=$(docker build -q -t creack/node .)
    
  2. Add a new tag

     $ docker tag $ID creack/node:0.10.24
    
  3. You can use this and skip the -t part from build

     $ docker tag $ID creack/node:latest
    

Solution 3 - Docker

Here is my bash script

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

You can then remove untagged images if you rebuilt the same version with

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

link

or

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

or

Clean up commands:

Docker 1.13 introduces clean-up commands. To remove all unused containers, images, networks and volumes:

docker system prune

or individually:

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

Solution 4 - Docker

ID=$(docker build -t creack/node .) doesn't work for me since ID will contain the output from the build.

SO I'm using this small BASH script:

#!/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

Solution 5 - Docker

Just grep the ID from 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

Needs no temporary file and gives full build output. You still can redirect it to /dev/null or a log file.

Solution 6 - Docker

Variation of Aaron's answer. Using sed without temporary files

#!/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

Solution 7 - Docker

To give tag to a docker file during build command:

docker build -t image_name:tag_name .

otherwise it will give latest tag to you image automatically.

Solution 8 - Docker

Hye it's very easy you just need to follow the below steps -

So, to create and tagging an image in Docker we can use the following commands

First take out your Docker id by running the below command

docker ps 

Copy -> Names

docker build -t dockerId/Name of your image you want:latest .

> For me I use docker build -t condescending_greider/newdoc:latest .

Thanks for your time

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGolo RodenView Question on Stackoverflow
Solution 1 - DockerTommyView Answer on Stackoverflow
Solution 2 - DockercreackView Answer on Stackoverflow
Solution 3 - Docker2Fast2BCnView Answer on Stackoverflow
Solution 4 - DockerAaron DigullaView Answer on Stackoverflow
Solution 5 - DockerPierre-Alexis de SolminihacView Answer on Stackoverflow
Solution 6 - DockerTonyView Answer on Stackoverflow
Solution 7 - DockerShubham TomarView Answer on Stackoverflow
Solution 8 - DockerSaurabh kumarView Answer on Stackoverflow