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 restart
and 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' >> .gitignore
Or 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
include
paths to the cloned directory. - Set the
PS
variable 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/sh
To 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 = whoami
But 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/sh
By 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