Skip to content

Instantly share code, notes, and snippets.

@wshihadeh
Created December 11, 2019 16:39
Show Gist options
  • Save wshihadeh/a4723f9773941f1526829982b99270a0 to your computer and use it in GitHub Desktop.
Save wshihadeh/a4723f9773941f1526829982b99270a0 to your computer and use it in GitHub Desktop.
Dokcer Image Makefile
# 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