This project provides Dockerfile syntax extensions that have been rejected by the moby project or haven't been addressed in a long time.
Currently, the project adds an INCLUDE+
Dockerfile directive that allows you to import the content of another file into your Dockerfile. There are plans to add more features in the near future.
First, you need to make sure you are running a compatible version of Docker:
- if you are using Docker 20.10+, you're all set!
- if you are using Docker 18.09+, then you need to export the following environment variable:
DOCKER_BUILDKIT=1
- if you are using an older version of Docker, you are out of luck. Sorry!
Once your Docker is set, you just need to add the following line as your first line in your Dockerfile:
# syntax = edrevo/dockerfile-plus
That's it!
Right now there is just one extra instruction: INCLUDE+
. All Dockerfile+ commands will end up with a +
sign to avoid any potential future collisions with Dockerfile commands.
INCLUDE+
will import the verbatim contents of another file into your Dockerfile. Here's an example Dockerfile which uses the INCLUDE+
instruction:
# syntax = edrevo/dockerfile-plus
FROM alpine
INCLUDE+ Dockerfile.common
ENTRYPOINT [ "mybin" ]
If Dockerfile.common contained a single line that said RUN echo "Hello World"
, then the resulting Docker image would be identical to the one generated by this Dockerfile:
FROM alpine
RUN echo "Hello World"
ENTRYPOINT [ "mybin" ]
The next features in line would be:
ENVFILE+
command, which would read a .env file and import all of those environment variable definitions into the DockerfileRUN+ --no-cache
, which would disable the cache only for a specific RUN step (useful for non-idempotent commands, for example those that clone git repos)TAG
command- improvements to .dockerignore, like recursive dockerignore files
Found a bug? Want to contribute a PR? Want to improve documentation or add a cool logo for the project? All contributions are welcome!
Install cargo (you can use rustup.rs) and run:
$ cargo build
$ docker build -f dockerfile-plus/Dockerfile .