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