Makefiles that make working with docker easier and more convenient.
The Makefiles...
-
Auto-generate a list of all available targets / commands that you can see by running
make help -
Provide useful default commands such as
make run,make restartand many more -
Allow you to add additional service-specific commands
-
Allow you to override default commands
-
Display the traefik URL of the service on start / restart
Take a look at the included example directory.
Inside, you will find an example docker-compose.yml and Makefile for a whoami service with traefik as the reverse proxy.
The Makefile has comments that explain all available settings and options.
Use that as a base to create a Makefile for your own project.
These makefiles are designed to work with docker-compose based services. So you need docker and docker-compose.
You also need the yaml parser yq and gawk to allow parsing of the docker-compose config to display the configured traefik URL of your service.
# macOS
brew install yq gawk
# linux
# gawk should already be installed
# Install yq:
(export VERSION=v4.16.1 BINARY=yq_linux_amd64 && sudo wget "https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}" -O /usr/bin/yq && sudo chmod +x /usr/bin/yq)You will need to add this repo to your project. You can either clone it...
# Clone this project
git clone https://github.com/Infused-Insight/docker_makefiles.git
echo '/docker_makefiles' >> .gitignoreOr add it as a submodule...
git submodule add https://github.com/Infused-Insight/docker_makefiles.git
git commit -m "Added docker_makefiles submodule"Create a Makefile using the code below as a template:
- Make sure to adjust the
includepaths to the cloned directory. - Set the
PSvariable to the most important service in yourdocker-compose.yml
# Run `make help` to get full list of available commands.
# Many targets are in the included makefiles.
# Default make targets (Required)
# These are the built-in commands that should be made available.
# The order in which you put them, is the order in which they will appear
# in the help.
include docker_makefiles/docker.mk
include docker_makefiles/help.mk
# Primary Service configuration (Required)
# Some commands, such as `make attach` target a specific service.
# This defines, which service should be used by default.
# If you want to target another one, you can override it in the command
# with `make attach PS=traefik`
PS = whoami
# Primary Service Shell (Optional)
# By default `make attach` and `make tty` run bash in the containers.
# But since some docker images don't have bash installed, you can use this
# to change it.
PS_SHELL = /bin/sh
# Set another command as the default target (Optional)
# If you simply run `make` without specifying a target, it will show the help.
# If you'd rather it did something else, such as build, you can change it with
# the line below.
# .DEFAULT_GOAL := build
# Additional make targets (Optional)
# Add custom targets like this.
# By adding a comment, you make them appear in the help
attach-traefik: ## Attach to the traefik service with a user shell
docker-compose exec "traefik" /bin/sh
# Override default targets (Optional)
# You can replace default targets by simply reimplementing them in
# your Makefile.
# Leave out the comment to make sure it doesn't show up twice in the help.
log:
@echo "3.6 roentgen, not great, not terrible..."Run make help to get a list of available commands.
Simply execute make xxx, such as make run or make restart.
Simply add them to your Makefile like any other make target.
If you add a comment with ## after the target name, the command will appear in the help.
attach-traefik: ## Attach to the traefik service with a user shell
docker-compose exec "traefik" /bin/shTo overwrite an existing command, just add it with the same name.
Don't include the help comment to ensure it doesn't show up in the help twice.
log:
@echo "3.6 roentgen, not great, not terrible..."Oftentimes, your docker-compose config will contain multiple services. For example when you are running a web application and a database in one config.
But some commands need to run on a specific container, such as make attach (which gives you a shell inside a running container).
You need to set which should be the primary container using the PS variable in your Makefile.
In the example project the primary service is set to whoami:
PS = whoamiBut if you wanted to get a shell inside the traefik container, you could overwrite it from the command line using make attach PS=traefik.
By default the commands make tty and make attach execute bash in the container.
But some docker images don't include bash and instead only ship with sh.
You can change the default shell by setting the PS_SHELL variable in in your Makefile:
PS_SHELL = /bin/shBy default running make (without a target) is the equivalent of executing make help.
If you want to change this to do something else instead, add the following line to your Makefile:
.DEFAULT_GOAL := build