Containerfile syntax
Documentation
man Containerfile
https://man.archlinux.org/man/community/containers-common/Containerfile.5.en Dockerfile ref https://docs.docker.com/engine/reference/builder/
Syntax
FROM
Every container starts with a from line. This indicates the base image that your container is built on top of.
FROM ubuntu:16.04
RUN
Commands that run when your container is being built for the first time.
RUN apt-get update && \ apt-get install python3-pipCMD
commands run every time your container is started.
CMD echo "welcome!" >> /home/user/welcome.txtADD
copy a file into your container.
Supports glob-style matching.ADD /path/file /path/file ADD Gemfile* /path/ ADD . /path/ ADD --chmod=user:user /path/file /path/fileENTRYPOINT
If you are creating a container to run a specific application, set that application to the
ENTRYPOINT
. This means that every time that your container is started, that application will run.ENTRYPOINT ['/usr/bin/firefox', '-private-window'] ## exec-style (best practice) ENTRYPOINT /usr/bin/firefox -private-window ## shell-style (discouraged, unix signals will be unavailable, your program will not be PID #1)If your entrypoint is a script, you can ensure that it is able to properly handle unix signals by using gosu and exec:
#!/bin/bash set -e if [ "$1" = 'postgres' ]; then chown -R postgres "$PGDATA" if [ -z "$(ls -A "$PGDATA")" ]; then gosu postgres initdb fi exec gosu postgres "$@" fi exec "$@"ENV
Set an environment variable in the container.
Once defined, they can be referred to as$VAR
ENV PYTHONPATH /home/dev/python ENV blah=$PYTHONPATHEXPOSE
Exposes a port inside the container to the host. (I am still unclear what interface the port is bound to... 127.0.0.1 ?)
Section Marked as Requiring Revision:
The official documentation says that expose does not actually forward container's ports, it only indicates that the container is listening on these ports. I need to test this to see what is actually happening when this command is used..
EXPOSE 8080 ## expose container's 8080 on host's 8080 EXPOSE 8080 9000 ## expose container's 8080 on host's 9000 EXPOSE 53/udp ## expose container's udp port 53 on host{{ NOTE | these ports are not exposed by default.
in order to expose all ports, use the-P
flag (ex.podman run -P
)ARG
Arg allows you to submit arguments at build time.
It can be accessed later similarly to an environment variable.ARG VERSION ARG VERSION=DEFAULT_VALUE RUN echo $VERSIONdocker build --build-arg VERSION=1.1.1VOLUME
Defines mountpoint for a volume inside the container.
This is optionally bound withindocker run -v /src:/dst
.
If not defined, then a location will be created automatically.Volumes can be shared between containers.