Detect if Docker image would change on running build
looking at docker inspect $image_name
from one build to another, several information doesn't change if the docker image hasn't changed. One of them is the docker Id
. So, I used the Id
information to check if a docker has been changed as follows:
First, one can get the image Id
as follows:
docker inspect --format {{.Id}} $docker_image_name
Then, to check if there is a change after a build, you can follow these steps:
- Get the image id before the build
- Build the image
- Get the image id after the build
- Compare the two ids, if they match there is no change, if they don't match, there was a change.
Code: Here is a working bash script implementing the above idea:
docker inspect --format {{.Id}} $docker_image_name > deploy/last_image_build_id.log
# I get the docker last image id from a file
last_docker_id=$(cat deploy/last_image_build_id.log)
docker build -t $docker_image_name .
docker_id_after_build=$(docker inspect --format {{.Id}} $docker_image_name)
if [ "$docker_id_after_build" != "$last_docker_id" ]; then
echo "image changed"
else
echo "image didn't change"
fi
There isn't a dry-run
option if that's what you are looking for. You can use a different tag to avoid affecting existing images and look for ---> Using cache
in the output (then delete the tag if you don't want it).