dockerfileのlinterを使う
dockerfileのlinterである hadolint
を利用してみます。
環境情報
- windows 10 Pro
インストール
scoopのインストール
windowsユーザは、 scoop
を利用してインストールする手順が紹介されています。 scoop
とは、様々なモジュールをコマンドラインでインストールしてくれるツールとのこと。PackageManagerとまではいかないけど、WindowsのださいGUIベースの処理をコマンドライン処理してくれるものらしいです。
powershellのプロンプトで、以下の通り実行します。
> Set-ExecutionPolicy RemoteSigned -scope CurrentUser > iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
hadolintのインストール
上でインストールしたscoopを用いてインストールを行います。
> scoop install hadolint
利用してみる
Dockerサイトで公開されているsshdコンテナ作成用のDockerfileを処理してみます。実際のDockerfileは下記。
# sshd # # VERSION 0.0.2 FROM ubuntu:14.04 MAINTAINER Sven Dowideit <SvenDowideit@docker.com> RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:screencast' | chpasswd RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
hadolintにかけてみる。
> hadolint C:\_\docker\sshd\Dockerfile C:\_\docker\sshd\Dockerfile:6 DL4000 MAINTAINER is deprecated C:\_\docker\sshd\Dockerfile:8 DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>` C:\_\docker\sshd\Dockerfile:8 DL3009 Delete the apt-get lists after installing something C:\_\docker\sshd\Dockerfile:8 DL3015 Avoid additional packages by specifying `--no-install-recommends` C:\_\docker\sshd\Dockerfile:10 DL4006 Set the SHELL option -o pipefail before RUN with a pipe in it
修正すべき点をあげてくれます。Githubにいくと、設定されているルール一覧があり、さらに各ルールにおいて、どのように記述すべきか記載してくれています。便利。
それに合わせて修正したDockerfileがこちら。
# sshd # # VERSION 0.0.2 FROM ubuntu:14.04 LABEL MAINTAINER="Sven Dowideit <SvenDowideit@docker.com>" SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN apt-get update && apt-get install -y --no-install-recommends \ openssh-server=1:6.6p1-2ubuntu2.13 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN mkdir /var/run/sshd RUN echo 'root:Passw0rd' | chpasswd RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]