Google、Dockerデーモンに依存せずコンテナイメージをビルドできる「kaniko」オープンソースで公開
Googleは、Dockerデーモンに依存せず、ユーザー空間内でDockerfileからコンテナイメージをビルドできるツール「kaniko」をオープンソースで公開しました。
通常、Dockerfileからコンテナイメージをビルドするには、Dockerデーモンにアクセスする必要があります。Dockerデーモンは実行にルート権限を必要とするため、ルート権限に簡単にアクセスできない環境、例えばKubernetesクラスタ内のDockerコンテナ環境などではコンテナイメージのビルドが難しいとされてきました。
オープンソースで公開されたツール「kaniko」は、この課題を解決するために開発されたとGoogleは説明しています。
With kaniko, we both build an image from a Dockerfile and push it to a registry. Since it doesn’t require any special privileges or permissions, you can run kaniko in a standard Kubernetes cluster, Google Kubernetes Engine, or in any environment that can’t have access to privileges or a Docker daemon.
kanikoを用いることで、(ルート権限へのアクセスがあってもなくても)どちらでもDockerfileからコンテナイメージをビルドし、レジストリへプッシュできます。というのも、kanikoは特権的なアクセス権限を必要とせず、標準的なKubernetesクラスタやGoogle Kubernetes Engineやそのほか特権的なアクセス権限やDockerデーモンにアクセスできないあらゆる環境でも実行できるからです。
Dockerデーモンに依存せずにコンテナイメージをビルドできるツールはすでにimgとorca-buildなどがあります。下記では、kanikoがこの2つとどのように異なるのかについて説明されています。
The img tool builds as an unprivileged user within a container, while kaniko builds as a root user within a container in an unprivileged environment. The orca-build tool executes builds by wrapping runc, which uses kernel namespacing techniques to execute RUN commands. We're able to accomplish the same thing in kaniko by executing commands as a root user within a container.
imgツールはコンテナ内で非特権ユーザーとしてビルドを行いますが、kanikoは非特権環境においてコンテ内でルートユーザーとしてビルドします。orca-buildツールはruncをラッピングすることによりビルドを実行します。これはRUNコマンドを実行するためのカーネル名前空間のテクニックです。 kanikoでは、 コンテナ内でルートユーザとしてコマンドを実行することによって同様のことを成し遂げています。
追記 2018/4/23:最後の和訳の間違いを修正しました。
あわせて読みたい
オラクル、JavaやJavaScript、Ruby、Pythonなど多言語対応を単一ランタイムで実現する「GraalVM」をオープンソースで公開。Twitterが本番環境で採用
≪前の記事
Kubernetesを統合した「Docker Enterprise Edition 2.0」正式版リリース。コンテナランタイム、オーケストレーション、ネットワーク機能などを含む総合コンテナソリューション