We can create better containers than just fixing their usage in advance and executing them. Maybe part of the command is the one to keep (like we always want the OpenVPN binary and options to be executed, no matter what), maybe everything needs to be overridden (that's the toolbox container model, such as a /bin/bash
command by default, but any other command given in argument can otherwise be executed), or a combination of the two, for a much more dynamic container.
To have a fixed command executed by the container, use the ENTRYPOINT
instruction. Use an array if the command is followed by arguments to be enforced:
FROM debian:stable-slim RUN apt-get update -y && \ apt-get install -y apache2 && \ rm -rf /var/lib/apt/ EXPOSE 80 ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
To override the whole command at runtime, use the --entrypoint...