mirror of
https://github.com/jordansissel/fpm
synced 2024-12-21 00:24:13 +01:00
62f1418e4a
Also add documentation for running the fpm test suite in docker. From #1681
71 lines
2.2 KiB
ReStructuredText
71 lines
2.2 KiB
ReStructuredText
FPM and Docker
|
|
==============
|
|
|
|
Because fpm depends on so many underlying system tools, docker can
|
|
alleviate the need to install them locally.
|
|
|
|
An end user may use a docker container in lieu of installing
|
|
locally. And a developer can use docker to run the test suite.
|
|
|
|
|
|
Running FPM inside docker
|
|
-------------------------
|
|
|
|
First, build a container will all the dependencies::
|
|
|
|
make docker-release-everything
|
|
|
|
Now, run it as you would the fpm command. Note that you will have to
|
|
mount your source directly into the docker volume::
|
|
|
|
docker run -v $(pwd):/src fpm --help
|
|
|
|
As a full example::
|
|
|
|
mkdir /tmp/fpm-test
|
|
mkdir /tmp/fpm-test/files
|
|
touch /tmp/fpm-test/files/one
|
|
touch /tmp/fpm-test/files/two
|
|
|
|
docker run -v /tmp/fpm-test/files:/src -v /tmp/fpm-test:/out fpm -s dir -t tar -n example -p /out/out.tar .
|
|
|
|
tar tf /tmp/fpm-test/out.tar
|
|
|
|
Depending on your needs, you will have to adjust the volume mounts and
|
|
relative paths to fit your particular situation.
|
|
|
|
Running rpsec inside docker
|
|
---------------------------
|
|
|
|
The Makefile provides some targets for testing. They will build a
|
|
docker container with the dependencies, and then invoked `rspec`
|
|
inside it. The makefile uses a sentinel file to indicate that the
|
|
docker image has been build, and can be reused.
|
|
|
|
make docker-test-everything
|
|
|
|
|
|
|
|
How does this work
|
|
------------------
|
|
|
|
The Dockerfile makes heavy use of multistage
|
|
builds. This allows the various output containers to build on the same
|
|
earlier stages.
|
|
|
|
There are two ``base`` images. A ``minimal`` image, which contains
|
|
compiled dependencies and ruby. And an ``everything`` image which brings
|
|
in scripting systems like ``python`` and ``perl``. These are split to
|
|
allow a smaller ``minimal`` image in cases where building scripting
|
|
language packages are not needed.
|
|
|
|
The Dockerfile the argument ``BASE_ENV`` to specify what base image to
|
|
use. This can be set to either ``minimal`` or ``everything``. If
|
|
unspecified, it defaults to ``everything``
|
|
|
|
We want to use the same set of base images for both the ``rspec``
|
|
testing, as well as the run time containerization. We do this by using
|
|
the ``TARGET`` argument to select which container to build.
|
|
|
|
The makefile encodes this logic with two pattern rules.
|