You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.5 KiB
Markdown
82 lines
2.5 KiB
Markdown
3 years ago
|
# Dockerfile+
|
||
|
|
||
|
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.
|
||
|
|
||
|
- [Getting started](#getting-started)
|
||
|
- [Features](#features)
|
||
|
- [INCLUDE+](#include)
|
||
|
- [Roadmap](#roadmap)
|
||
|
- [Feedback](#feedback)
|
||
|
|
||
|
## Getting started
|
||
|
|
||
|
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:
|
||
|
|
||
|
```Dockerfile
|
||
|
# syntax = edrevo/dockerfile-plus
|
||
|
```
|
||
|
|
||
|
That's it!
|
||
|
|
||
|
## Features
|
||
|
|
||
|
### INCLUDE+
|
||
|
|
||
|
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:
|
||
|
|
||
|
```Dockerfile
|
||
|
# 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:
|
||
|
|
||
|
|
||
|
```Dockerfile
|
||
|
FROM alpine
|
||
|
|
||
|
RUN echo "Hello World"
|
||
|
|
||
|
ENTRYPOINT [ "mybin" ]
|
||
|
```
|
||
|
|
||
|
## Roadmap
|
||
|
|
||
|
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 Dockerfile
|
||
|
- `RUN+ --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
|
||
|
|
||
|
## Feedback
|
||
|
|
||
|
Found a bug? Want to contribute a PR? Want to improve documentation or add a cool logo for the project? All contributions are welcome!
|
||
|
|
||
|
### Development environment
|
||
|
|
||
|
Install cargo (you can use [rustup.rs](https://rustup.rs/)) and run:
|
||
|
|
||
|
```bash
|
||
|
$ cargo build
|
||
|
```
|
||
|
|
||
|
### Creating a local release of the Buildkit frontend
|
||
|
|
||
|
```bash
|
||
|
$ docker build -f dockerfile-plus/Dockerfile .
|
||
|
```
|