Weblog by shuuji3

Software Engineering

GitpodにおけるDockerのRootlessモードの活用

この記事では、DockerのRootlessモードと、Gitpodでの活用について説明します。

DockerのRootlessモード

RootlessモードでDockerを使うと、ユーザー空間上でユーザー権限でdockerdが起動されます。これにより、通常のroot権限で実行されるdockerdに比べて安全にDockerコンテナが実行できるようになります。

Dockerのrootlessモードは、主にAkihiro Sudaさんが実装しています。Dockerでは長い間experimentalな状態で、利用には別のバイナリのインストールが必要でした。しかし、v20.10でようやくGAとなり、標準のDockerで利用できるようになりました (ref. New features in Docker 20.10 (Yes, it’s alive) | by Akihiro Suda | nttlabs | Medium)。

最近では、Kubernetesでもrootlessモードの実装が活発に進められています (ref. keps/127: Support User Namespaces by mauriciovasquezbernal · Pull Request #2101 · kubernetes/enhancements)。

Gitpodでの活用

Gitpodでは長い間、開発環境のユーザー環境でdockerコマンドを利用できませんでした。Gitpod自体が共有環境で動いているため、rootユーザーで動作しているdockerdへのアクセスはセキュリティ上許可することが不可能でした。以下のPodcastで、Dockerを利用できるようにする試みを行っている話がされてます。

Gitpod: Cloud Development Environments with Johannes Landgraf and Sven Efftinge - Software Engineering Daily

その後、Gitpodでは、この問題を解決するためにRootlessモードを利用することになり、一般に利用できるようになったことが、2020年12月に発表されました。Gitpod上では、sudo docker-upコマンドを実行すると、rootlessモードでDockerデーモン(dockerd)が起動されます。なお、2021-02-13時点では、Feature Previewなので、利用するにはオプションから有効にする必要があります。

RootlessモードのDockerや、それを利用したGitpod内のしくみについては、次の動画で詳しく解説されています。