Behalten Sie Ihre Dockerfile mit dem Quellcode. Wir verwenden Labels, um Versionsinformationen zum erzeugten Bild hinzuzufügen. Wir fügen:
- die git commit und Zweig
- ob es "dirty", was bedeutet, dass Änderungen wurden von lokal auf dem src-Code gemacht, was in git
- eine CI-Versionsnummer (öffentlich sichtbar)
- die Person, die das Bild erstellt hat (nicht die Person, die zuletzt git eingecheckt hat)
Wir markieren auch das Bild mit der Commit-Nummer.
Hier ist unser Code für einen unserer Dienste. Wir verwenden Buildkite für unsere CI und Quay.io für unsere Bildregistrierung.
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
Dann können Sie Skripte, dass die Version des Bildes überprüfen. ZB:
docker inspect --format "{{.ContainerConfig.Labels.commit}}" imageid
Die Dockerfile selbst kann wie ein Makefile behandelt werden. Also behalte es dort, wo du diese behalten würdest. Das ist wahrscheinlich Option 1. Oder sprechen Sie über das Docker-Image, das durch Ausführen der Docker-Datei erstellt wurde? – Thilo