2.6 KiB
Image Lint
To comply with Docker best practices, we are using the Hadolint tool to analyse each Dockerfile
.
Installation
There is a specific make
target to install the linter.
By default hadolint
will be installed in ${HOME}/hadolint
.
$ make lint-install
# Installing hadolint at /Users/romain/hadolint ...
# Installation done!
# Haskell Dockerfile Linter v1.17.6-0-gc918759
Lint
Per Stack
The linter can be run per stack.
$ make lint/scipy-notebook
# Linting Dockerfiles in scipy-notebook...
# scipy-notebook/Dockerfile:4 DL3006 Always tag the version of an image explicitly
# scipy-notebook/Dockerfile:11 DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
# scipy-notebook/Dockerfile:18 SC2086 Double quote to prevent globbing and word splitting.
# scipy-notebook/Dockerfile:68 SC2086 Double quote to prevent globbing and word splitting.
# scipy-notebook/Dockerfile:68 DL3003 Use WORKDIR to switch to a directory
# scipy-notebook/Dockerfile:79 SC2086 Double quote to prevent globbing and word splitting.
# make: *** [lint/scipy-notebook] Error 1
Optionally you can pass arguments to the linter.
# Use a different export format
$ make lint/scipy-notebook ARGS="--format codeclimate"
All the Stacks
The linter can be run against all the stacks.
$ make lint-all
Ignoring Rules
Sometimes it is necessary to ignore some rules.
The following rules are ignored by default and sor for all images in the .hadolint.yaml
file.
DL3006
: We use a specific policy to manage image tags.base-notebook
FROM
clause is fixed but based on an argument (ARG
).- Building downstream images from (
FROM
) the latest is done on purpose.
DL3008
: System packages are always updated (apt-get
) to the latest version.
For other rules, the preferred way to do it is to flag ignored rules in the Dockerfile
.
It is also possible to ignore rules by using a special comment directly above the Dockerfile instruction you want to make an exception for. Ignore rule comments look like
# hadolint ignore=DL3001,SC1081
. For example:
FROM ubuntu
# hadolint ignore=DL3003,SC1035
RUN cd /tmp && echo "hello!"