Blubber/Tutorial/HelloWorld
The standard example for any software is one that can print "Hello World!" to the console.
Blubberfile
Here is a Blubberfile that will print "Hello World!" to the console and exit.
version: v4
base: docker-registry.wikimedia.org/wikimedia-stretch
variants:
hello:
entrypoint: [echo, "Hello, world!"]
I have the file above saved as hello-blubber.yaml
. To generate a
Dockerfile from hello-blubber.yaml
I pass the blubber
command line application two arguments: (1) the path to the
hello-blubber.yaml
file and (2) the name of the variant (from the
keys listed under variants
) from which I would like to generate a
Dockerfile. In this case hello-blubber.yaml
only has one variant
named hello
.
Dockerfile from Blubberfile
developer@laptop:~/blubber-tutorial$ blubber hello-blubber.yaml hello
This command produces the following Dockerfile on stdout (the output you see
may vary depending on your version of blubber
):
FROM docker-registry.wikimedia.org/wikimedia-stretch
USER "root"
ENV HOME="/root"
RUN groupadd -o -g "65533" -r "somebody" && useradd -o -m -d "/home/somebody" -r -g "somebody" -u "65533" "somebody" && mkdir -p "/srv/app" && chown "65533":"65533" "/srv/app" && mkdir -p "/opt/lib" && chown "65533":"65533" "/opt/lib"
RUN groupadd -o -g "900" -r "runuser" && useradd -o -m -d "/home/runuser" -r -g "runuser" -u "900" "runuser"
USER "somebody"
ENV HOME="/home/somebody"
WORKDIR "/srv/app"
USER "runuser"
ENV HOME="/home/runuser"
ENTRYPOINT ["echo", "Hello, world!"]
LABEL blubber.variant="hello" blubber.version="0.4.0+60add2d"
Blubber's only purpose is to create opinionated Dockerfiles. To generate a
Dockerfile from a Blubberfile you pass the blubber
command line
program the path to a Blubberfile and a variant name.
Variants can be named anything, although it is common to have (at minimum)
a test
variant that creates a Dockerfile for an image that runs a
test entrypoint, and a production
variant that creates a
Dockerfile to build an image that can be run in production. To create a Docker
Image from this Dockerfile, you can use unix pipes to pipe the output of
Blubber to the input of the docker build
command.
Build a Variant Image
developer@laptop:~/blubber-tutorial$ blubber hello-blubber.yaml hello | docker build --tag blubber-tutorial-hello-world --file - .
The command above creates a local Docker Image tagged with the name
blubber-tutorial-hello-world
. Using -
as the file
tells docker build
to use stdin as the Dockerfile. .
at the end of the command tells docker build
to use the current
directory as the context for any copy commands.
Run a Docker Image
To run this image issue the following command:
developer@laptop:~/blubber-tutorial$ docker run --rm --interactive --tty blubber-tutorial-hello-world:latest
Hello, World!