げっとシステムログ

WEB開発メモ

dockle で docker build のベストプラクティスをチェックしてみる

CONTENTS
  1. dockle をインストールする
  2. dockle を試してみる
  3. DOCKER_CONTENT_TRUST について
  4. sudo について
  5. apt-get のキャッシュクリアについて
  6. まとめ
  7. 参考資料
ENVIRONMENTS
  • dockle : v0.1.14

dockle をインストールする

goodwithtech/dockle : GitHub を参考に dockle をインストールする。

実行環境は docker コンテナを使用するようにしているので、docker で起動する方法を選択した。

TOP

dockle を試してみる

dockle コマンドで指定したイメージのチェックができる。

dockle [イメージ]

開発に使用しているイメージ (getto-systems/labo-container-dockerfile) をチェックしてみたところ、いくつか警告が出た。

特に、以下の項目について知らなかったので調べた記録を残しておく。

  • DOCKER_CONTENT_TRUST を有効にしているか
  • apt-get のキャッシュがクリアされていない
  • sudo を使うべきではない

TOP

DOCKER_CONTENT_TRUST について

DOCKER_CONTENT_TRUST を 1 にしておくと、docker pull する時に trust data をチェックするようになる。 pull したイメージが、作成した人の public key で検証できなければエラーになる、というもののようだ。

Introducing Docker Content Trust : Docker Blog を読んでいる途中だが、どう使えば良いかわかっていない。 とりあえず、以下の方法を探っている。

  • 本番環境で DOCKER_CONTENT_TRUST を有効にする方法
  • 本番環境で使用するイメージを DOCKER_CONTENT_TRUST を有効にして作成する方法

これらの方法が理解できれば、DOCKER_CONTENT_TRUST にうまく乗っかれるはず。

TOP

sudo について

sudo コマンドは使用を避けるべき、ということが best practices : docker docs に書いてある。 どうしても root になる挙動が欲しいなら、tianon/gosu : GitHub のようなツールを使用する、とある。

tianon/gosu : GitHub では、Alternatives の項目に setpriv も同じことが実現できると書かれていたので、これを使用することにした。

setpriv を使用して書き直した entrypoint.sh がこれ。

#!/bin/bash

groupmod -n $LABO_USER $BUILD_LABO_USER
usermod -l $LABO_USER -d /home/$LABO_USER -g $LABO_USER -G $LABO_USER,docker $BUILD_LABO_USER

export HOME=/home/$LABO_USER

exec setpriv --reuid $LABO_USER --regid $LABO_USER --init-groups "$@"

setpriv は環境変数を初期化しないので、HOME を設定しないと HOME=/root のままになってしまう。 --reset-env というオプションが man に乗っていたのだが、そんなオプションはないと言われてしまった。

これで sudo を使用するのとだいたい同じ挙動になった。

TOP

apt-get のキャッシュクリアについて

apt-get のキャッシュは以下のコマンドでクリアできる。

apt-get clean && rm -rf /var/lib/apt/lists/*

これを apt-get install の後に実行するようにすれば良い。

TOP

まとめ

dockle を使用してベストプラクティスにしたがっているかチェックした。 知らないことが色々あったので今後も追っていきたい。

また、これを CI に組み込んで定期的にチェックできるようにしたい。

TOP

参考資料

TOP