CONTENTS
ENVIRONMENTS
- dockle : v0.1.14
dockle をインストールする
goodwithtech/dockle : GitHub を参考に dockle をインストールする。
実行環境は docker コンテナを使用するようにしているので、docker で起動する方法を選択した。
dockle を試してみる
dockle コマンドで指定したイメージのチェックができる。
dockle [イメージ]
開発に使用しているイメージ (getto-systems/labo-container-dockerfile) をチェックしてみたところ、いくつか警告が出た。
特に、以下の項目について知らなかったので調べた記録を残しておく。
- DOCKER_CONTENT_TRUST を有効にしているか
- apt-get のキャッシュがクリアされていない
- sudo を使うべきではない
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 にうまく乗っかれるはず。
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
を使用するのとだいたい同じ挙動になった。
apt-get のキャッシュクリアについて
apt-get のキャッシュは以下のコマンドでクリアできる。
apt-get clean && rm -rf /var/lib/apt/lists/*
これを apt-get install
の後に実行するようにすれば良い。
まとめ
dockle を使用してベストプラクティスにしたがっているかチェックした。 知らないことが色々あったので今後も追っていきたい。
また、これを CI に組み込んで定期的にチェックできるようにしたい。