Preferred method for Docker File Versioning

0 votes

I simply want to know how best to user docker with git? We're a team of 6. We want to make sure that everyone is using the same libraries and dependencies. We're using docker to compile our source in the localhost. Just want to know how best to do the versioning?

  1. Add the Dockerfile to the source code repository
  2. Create a dedicated repository for all our Dockerfiles
  3. Created a dedicated repository for each Dockerfile
  4. Others?
Jun 11, 2018 in Docker by Atul
• 10,240 points
73 views

1 answer to this question.

0 votes

Use labels to add versioning information to the docker image. Keep the dockerfile and the source code together.

  • the git commit and branch
  • whether it's "dirty" meaning that changes were made locally on the src code from what's in git
  • a CI version number (publicly visible)
  • the person who built the image (not the person who last checked in git)

Add the commit number to the image. Here's a sample of what it would be like:

build-image.sh

echo '===> Building docker image...'

GIT_BRANCH=$(git name-rev --name-only HEAD | sed "s/~.*//")
GIT_COMMIT=$(git rev-parse HEAD)
GIT_COMMIT_SHORT=$(echo $GIT_COMMIT | head -c 8)
GIT_DIRTY='false'
BUILD_CREATOR=$(git config user.email)
BUILD_NUMBER="${BUILDKITE_BUILD_NUMBER-0}"
# Whether the repo has uncommitted changes
if [[ $(git status -s) ]]; then
    GIT_DIRTY='true'
fi

docker build \
  -q \
  -t quay.io/myco/servicename:latest \
  -t quay.io/myco/servicename:"$GIT_COMMIT_SHORT" \
  --build-arg GIT_BRANCH="$GIT_BRANCH" \
  --build-arg GIT_COMMIT="$GIT_COMMIT" \
  --build-arg GIT_DIRTY="$GIT_DIRTY" \
  --build-arg BUILD_CREATOR="$BUILD_CREATOR" \
  --build-arg BUILD_NUMBER="$BUILD_NUMBER" \
  .

echo "Done"
echo "Push to quay using:"
echo "  docker push quay.io/myco/servicename:latest"
echo "  docker push quay.io/myco/servicename:$GIT_COMMIT_SHORT"

Dockerfile

FROM ...

ARG GIT_COMMIT
ARG GIT_BRANCH=master
ARG GIT_DIRTY=undefined
ARG BUILD_CREATOR
ARG BUILD_NUMBER

LABEL branch=$GIT_BRANCH \
    commit=$GIT_COMMIT \
    dirty=$GIT_DIRTY \
    build-creator=$BUILD_CREATOR \
    build-number=$BUILD_NUMBER

... etc

You can then write scripts to check for the version of the image

docker inspect --format "{{.ContainerConfig.Labels.commit}}" imageid
answered Jun 11, 2018 by ajs3033
• 7,240 points

Related Questions In Docker

0 votes
1 answer

Where can I find Docker log (driver json-file) location for ‘Docker for windows’?

For windows, the container storage is the ...READ MORE

answered Aug 16, 2018 in Docker by Sophie may
• 9,370 points
105 views
0 votes
1 answer
+6 votes
4 answers

Error: Docker saying "bad file descriptor"

The solution was easy enough. Add these ...READ MORE

answered Mar 26, 2018 in Docker by DragonLord999
• 8,380 points
755 views
+2 votes
6 answers

If conditional in docker file

You can use the test command RUN test ...READ MORE

answered Dec 10, 2018 in Docker by Shushant
10,143 views
+13 votes
2 answers
0 votes
1 answer
0 votes
2 answers

Can't access apache karaf docker container

To access karaf shell directly you can ...READ MORE

answered Aug 6, 2018 in Docker by Nilesh
• 6,900 points
154 views
0 votes
1 answer

Unable to switch filesystem to overlay in Docker in Ubuntu.

From the official docs: https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/#configure-docker-with-the-overlayoverlay2-storage-driver To configure Docker ...READ MORE

answered Jul 18, 2018 in Docker by ajs3033
• 7,240 points
434 views