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?
8 Answers
You can have multiple tags when building the image:
$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 . 1Once you have your image, you can use
$ docker tag <image> <newName>/<repoName>:<tagName> Build and tag the image with creack/node:latest
$ ID=$(docker build -q -t creack/node .)Add a new tag
$ docker tag $ID creack/node:0.10.24You can use this and skip the -t part from build
$ docker tag $ID creack/node:latest
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}") 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 4ID=$(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 1Just grep the ID from docker images:
docker build -t creack/node:latest . 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.
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 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.
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