All Projects → edrevo → dockerfile-plus

edrevo / dockerfile-plus

Licence: Apache-2.0, MIT licenses found Licenses found Apache-2.0 LICENSE-APACHE MIT LICENSE-MIT
New commands for Dockerfile

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to dockerfile-plus

Buildkit
concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit
Stars: ✭ 4,537 (+2463.28%)
Mutual labels:  buildkit
Img
Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder.
Stars: ✭ 3,512 (+1884.18%)
Mutual labels:  buildkit
oci-build-task
a Concourse task for building OCI images
Stars: ✭ 57 (-67.8%)
Mutual labels:  buildkit
buildkit-nix
Nix derivations as Dockerfiles (`docker build -f default.nix .`)
Stars: ✭ 99 (-44.07%)
Mutual labels:  buildkit
gockerfile
🐳 gockerfile is a YAML Docker-compatible alternative to the Dockerfile Specializing in simple go server.
Stars: ✭ 44 (-75.14%)
Mutual labels:  buildkit

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

  • First, you need to make sure you are running a compatible version of Docker: you need at least Docker 18.09. If you are using an older version, you are out of luck. Sorry!
  • Export the following environment variables to enable Buildkit: DOCKER_BUILDKIT=1 and COMPOSE_DOCKER_CLI_BUILD=1 (this might not be necessary for newer installations of Docker)

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!

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:

# 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" ]

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) and run:

$ cargo build

Creating a local release of the Buildkit frontend

$ docker build -f dockerfile-plus/Dockerfile .

Creating multi-arch build

  • Enable Experiment in docker config. Add {"experimental": true} to docker daemon.json
  • Setup BuildKit local build container
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker buildx create --name multiarch --driver docker-container --use
docker buildx inspect --bootstrap
  • Run following to start multi-arch build
docker buildx build \                                                                   
--platform linux/arm64/v8,linux/amd64 \
--tag edrevo/dockerfile-plus:latest \
-f dockerfile-plus/Dockerfile \
--load ## or --push to push DockerHub \ 
.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].