Clairをインストールして、Dockerイメージの脆弱性スキャンをする手順
Dockerイメージの脆弱性スキャンツール「Clair」 をインストールして、ローカルのイメージをチェックする手順です。微妙にはまったのでメモ。
0.環境
$ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ docker -v Docker version 1.10.2, build c3959b1
1.PostgreSQLをインストールして起動
$ docker pull postgres:latest $ docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=<パスワード> -d postgres
2.clairをインストールして起動
$ mkdir ./clair_config $ curl -L https://raw.githubusercontent.com/coreos/clair/master/config.example.yaml -o ./clair_config/config.yaml $ vi ./clair_config/config.yaml # database - source を以下の通り変更 --- database: # PostgreSQL Connection string # http://www.postgresql.org/docs/9.4/static/libpq-connect.html source: postgresql://postgres:<パスワード>@postgres:5432?sslmode=disable --- $ docker run -p 6060-6061:6060-6061 --link postgres:postgres -v /tmp:/tmp -v $PWD/clair_config:/config quay.io/coreos/clair -config=/config/config.yaml
脆弱性データの読み込みが開始されるので、"updater: update finished" が表示されるまで待ちます。(1時間くらいかかりました・・・)
3.ローカルチェックツールをインストールして実行。
$ sudo yum -y install golang $ export GOPATH=~/.go $ go get -u github.com/coreos/clair/contrib/analyze-local-images $ docker pull <チェックしたいイメージ> $ sudo $GOPATH/bin/analyze-local-images <チェックしたいイメージ>
継続的に実行するにはどうしたらいいんだろう・・・。
追記: docker-compose.yml
docker-compose.yml
も作ってみました。
version: '2' services: postgres: container_name: clair_postgres image: postgres:latest environment: POSTGRES_PASSWORD: <パスワード> ports: - "5432:5432" volumes: - ./data:/var/lib/postgresql/data clair: container_name: clair_clair image: quay.io/coreos/clair ports: - "6060-6061:6060-6061" links: - postgres volumes: - /tmp:/tmp - ./config:/config command: [-config, /config/config.yaml]
GitHub の Dockerfile から Docker Image を自動ビルドする設定手順
Docker Hub の Automated Builds を使うと、GitHub または Bitbucket の Dockerfile の変更を検知して、Docker Image を自動ビルドすることができます。
- レポジトリへのコミットを検知して、Docker Hub の Docker Image を自動でビルドします。
- タグやブランチの追加を検出して、自動でタグ・ブランチ名をTAGとした Docker Image を作ることも可能。
一通り設定を試してみたので、メモです。
- unagenau/docker-jiji2 に配置している Dockerfile を自動ビルドするようにしてみました。
- Docker Hub のアカウントがない場合は、こちらから作成してください。
1. Docker Hub のアカウント と GitHubアカウントとを連携させる
まず初めに、Docker Hub のアカウント と GitHubアカウントとを連携させる必要があります。
Docker Hubにログインして、右上のメニューから Settings を選択します。
続いて、 上のタブから Linked Accounts & Services を選択。
GitHub を選択。
リンク方法を選択します。 自動でhookを設定してくれるらしいので、 Public and Private を選択しました。
連携確認の画面が表示されるので、連携を許可して完了。
2. 自動ビルドを行うレポジトリを作る
GitHubアカウントとの連携ができたら、自動ビルドを行うレポジトリを作ります。
右上のメニューから Create - Create Automated Build を選択。
GitHub をクリック。
Dockerfile をホストしているレポジトリを選択します。
もろもろ設定します。
- Short Description に説明を入力
- Click here to customize をクリックすると、詳細設定画面が開きます。
- Dockerfile をルートディレクトリに置いていなかったので、詳細画面の Dockerfile Locationで指定しています。
- また、タグの追加を検出して、タグ名付のイメージを作成する設定も行ってみました。
設定が完了後、Create をクリックすると、レポジトリが作成されます。
3. イメージをビルドしてみる
レポジトリができたら、GitHubレポジトリに変更をコミットする or タグを追加すると、自動でビルドが行われます。 また、UIから手動でビルドを実行することもできます。手動ビルドしたい場合は、Build Settings の Trigger ボタンをクリックすればOK。
Build Details タブで、ビルドタスクの実行状況を確認できます。
一旦 Quque に積まれた後、 10分程度待つとビルドされました。