On Sat, Nov 23, 2019 at 7:15 PM sebb <seb...@gmail.com> wrote:
>
> The Puppet init.pp script [1] sets up several directories which are not yet
> reflected in the Docker build, e.g. /srv/cache
>
> Where is the best place to set these up?

Short answer: in the Dockerfile.

Longer answer:

1) Anything that is static and idempotent can and should be build in
the Dockerfile.  The theory is that you should be able to destroy a
container and rebuild it from the Dockerfile and end up with exactly
the same image.  In practice this isn't exactly true (apt-get update
may get newer versions of packages, for example), but is close enough
to be true in practice.  One thing that a Dockerfile can NOT depend on
is mounted file systems or environment variables.  docker-compose.yaml
can make use of environment variables.

2) Anything that is in the container (e.g.. changes made by commands
invoked via RUN or EXEC) should be ephemeral.  If a container is
pruned, there should not be anything lost of significance.

3) Everything else should go into a volume as volumes have lives
outside of images and containers.  Host volumes are mounted, and on
macOS and Windows have performance characteristics of a remote file
system (e.g. nfs) whereas on Linux they have native mounted
performace.  Anonymous and named volumes have native performance on
all operating systems, but can't be directly accessed by the host
machine.

Notes:

1) During development, the contents of the local clone of whimsy and
even the gems installed are generally not considered static, and hence
belong on a volume.

2) The current docker:entrypoint rake task contains only commands that
can be run fast and depend on things like contents of volume mounts
(e.g. the whimsy source code) or environment variables (the name of
the user's home directory).

- Sam Ruby

> [1]
> https://github.com/apache/infrastructure-puppet/blob/deployment/modules/whimsy_server/manifests/init.pp#L178

Reply via email to