滿多人在設計程式並沒有版本概念,因此要把程式包裝成 Docker 要指定舊版就會變得不太方便,所以在這邊寫了一個特別的 Dockerfile 來處理這個問題。
使用 Dockerfile 指定 Commit 版本
此範例使用 Docker Ubuntu 20.04 作為範例,安裝 Git 後使用 Git 指令變更程式
FROM ubuntu:20.04 LABEL maintainer="Clarence Lin <[email protected]>" RUN apt update RUN apt install -y git ARG GIT_REPO ENV GIT_REPO $GIT_REPO ARG GIT_FOLDER ENV GIT_FOLDER $GIT_FOLDER ARG GIT_URL ENV GIT_URL $GIT_URL ARG SOURCE_BRANCH ENV SOURCE_BRANCH $SOURCE_BRANCH ARG SOURCE_COMMIT ENV SOURCE_COMMIT $SOURCE_COMMIT RUN git clone $GIT_URL $GIT_FOLDER \ && cd $GIT_FOLDER \ && git checkout $SOURCE_BRANCH \ && git reset --hard $SOURCE_COMMIT
Build Docker 腳本
主要需要修改的為腳本上方定義的變數,DOCKER 開頭的代表編譯 Docker 會使用到的參數,而這邊最需要注意的是 SOURCE_BRANCH,現在很多 Repo 使用的預設 Branch 可能是 main 而不是 master,而 SOURCE_COMMIT 可以直接使用 SHA 來讓 Git 直接跳到指定的 Commit 位置,如果不指定 SHA 位置就把上方的指令解除註解不然會錯誤。
DOCKER_REPO="clarencetw/projen-cdk-ec2-web" DOCKER_TAG="latest" GIT_REPO="clarencetw/projen-cdk-ec2-web" GIT_FOLDER="projen-cdk-ec2-web" GIT_URL="https://github.com/${GIT_REPO}.git" SOURCE_BRANCH="main" # SOURCE_COMMIT=`git ls-remote ${GIT_URL} ${SOURCE_BRANCH} | awk '{ print $1 }'` SOURCE_COMMIT="4f4502403c2c17253ffda1f9c750e4455a24fdb7" echo DOCKER_REPO: $DOCKER_REPO echo DOCKER_TAG: $DOCKER_TAG echo GIT_REPO: $GIT_REPO echo GIT_FOLDER: $GIT_FOLDER echo GIT_URL: $GIT_URL echo SOURCE_BRANCH: $SOURCE_BRANCH echo SOURCE_COMMIT: $SOURCE_COMMIT echo "building repo: ${GIT_REPO}" docker build \ --build-arg GIT_REPO=$GIT_REPO \ --build-arg GIT_FOLDER=$GIT_FOLDER \ --build-arg GIT_URL=$GIT_URL \ --build-arg SOURCE_BRANCH=$SOURCE_BRANCH \ --build-arg SOURCE_COMMIT=$SOURCE_COMMIT \ -t $DOCKER_REPO:$DOCKER_TAG .
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!