-
-
Save satnami/7b6be1f8c39d72f1ed674a1792a250fb to your computer and use it in GitHub Desktop.
Dokcer Image Makefile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The Project namespace, wshihadeh by default | |
NAMESPACE ?= wshihadeh | |
# Image name: simply we can use the application name | |
IMAGE_NAME := simple-rails | |
# The URL of Docker registry used to host the image. | |
REGISTRY ?= index.docker.io | |
# Docker image full name | |
IMAGE_FULL_NAME := ${REGISTRY}/${NAMESPACE}/${NAME} | |
# Get the branch name using git if it is not provided. | |
BRANCH ?= $$(git symbolic-ref --short HEAD) | |
# Create an image tag based on the branch name | |
BRANCH_TAG := $$(echo ${BRANCH} | tr / _) | |
# Get the last commit hash on the used branch | |
COMMIT_HASH := $$(git rev-parse HEAD) | |
# The Command used to start the container | |
COMMAND := rails server | |
# Ports to expose when starting the container | |
PORT := -p 8080:8080 | |
# Define any environment variables needed to start container here | |
CONTAINER_ENV= -e RAILS_ENV=production -e RAILS_LOG_TO_STDOUT=true | |
# Set build parameters | |
BUILD_PARAMS := --pull --label com.revision=${COMMIT_HASH} | |
# Set build args | |
BUILD_ARGS := --build-arg APP_VERSION=$$(git describe --abbrev=0 --tags) | |
# Get ruby version | |
RUBY_VERSION := $$(<.ruby-version) | |
# Get ruby gemset name | |
RUBY_GEMSET := $$(<.ruby-gemset) | |
# Make sure recipes are always executed | |
.PHONY: config build push run clean shell start stop release | |
config: | |
@echo "Running configuration ..."; \ | |
rvm --create ruby-${RUBY_VERSION}@${RUBY_GEMSET}_${BRANCH_TAG} && rvm info ruby,environment; \ | |
rvm use ruby-${RUBY_VERSION}@${RUBY_GEMSET}_${BRANCH_TAG}; \ | |
bundle package --all-platforms --all --no-install ; | |
build: | |
@echo "Building Docker Image ..."; \ | |
echo "Branch: " ${BRANCH}; \ | |
echo "Commit hash: " ${COMMIT_HASH}; \ | |
docker build ${BUILD_PARAMS} ${BUILD_ARGS} -t ${IMAGE_FULL_NAME}:${COMMIT_HASH} . ; \ | |
docker tag ${IMAGE_FULL_NAME}:${COMMIT_HASH} ${IMAGE_FULL_NAME}:${BRANCH_TAG}; | |
shell: | |
docker run --rm --name ${NAME}-${BRANCH_TAG} ${CONTAINER_ENV} -it ${PORT} ${IMAGE_FULL_NAME}:${COMMIT_HASH} sh | |
run: | |
docker run --rm --name ${NAME}-${BRANCH_TAG} ${CONTAINER_ENV} -it ${PORT} ${IMAGE_FULL_NAME}:${COMMIT_HASH} ${COMMAND} | |
start: | |
docker run -d --name ${NAME}-${BRANCH_TAG} ${CONTAINER_ENV} ${PORT} ${IMAGE_FULL_NAME}:${COMMIT_HASH} ${COMMAND} | |
stop: | |
docker rm -f ${NAME}-${BRANCH_TAG} | |
push: | |
@echo "Pushing Docker image ..."; \ | |
docker push ${IMAGE_FULL_NAME}:${COMMIT_HASH}; \ | |
docker push ${IMAGE_FULL_NAME}:${BRANCH_TAG}; \ | |
if [[ "${BRANCH}" == "master" ]]; then \ | |
docker tag ${IMAGE_FULL_NAME}:${COMMIT_HASH} ${IMG}:latest; \ | |
docker push ${IMAGE_FULL_NAME}:latest; \ | |
fi | |
release: config build push | |
clean: | |
@if [[ "${BRANCH}" == "master" ]]; then docker rmi -f ${IMAGE_FULL_NAME}:latest; fi; \ | |
docker rmi -f ${IMAGE_FULL_NAME}:${BRANCH_TAG}; \ | |
docker rmi -f ${IMAGE_FULL_NAME}:${COMMIT_HASH}; \ | |
rvm --force gemset delete ruby-${RUBY_VERSION}@${RUBY_GEMSET}_${BRANCH_TAG}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment