GitLab CIでDockerの中でDockerを動かす

目次

概要

GitLabでは、GitLab CIという、CI環境が付いています。

このCI環境は、Dockerをベースにしていて、Dockerのイメージを指定して、そのイメージを元にしたコンテナ上でテストなどのタスクを実行するというものになっています。

しかし、Dockerのコンテナ上で、さらにイメージをダウンロードしてコンテナを起動しようとすると、通常の設定ではタスクの実行に失敗します。

例えば、docker:dindというコンテナの中でさらにコンテナを起動するためのイメージがあるのですが、GitLab CIでこのイメージを使ってコンテナを起動し、さらに別のイメージを使ってコンテナを起動すると失敗します。

ここでは、GitLab CIでコンテナの中でコンテナを起動する方法を説明します。

解決方法

コンテナの中でコンテナを起動する方法として、CIが実行されるGitLab Runnerの設定を変更する必要があります。

GitLab Runnerのインストールされているサーバにログインしたら、/etc/gitlab-runner/config.tomlという設定ファイルがあるので、それを開きます。

開くと、GitLab Runnerの設定が書いてあるので、その中で下記のような記述があるのでそれを変更します。

privileged = false

これをtrueに変更します。

privileged = true

これで、Dockerのコンテナからさらにコンテナを起動することができるようになりました。

さいごに

公式の情報として、これらの設定方法が紹介されているのですが、見つけるのに苦労しました。

ちなみに、このようにDockerの中でDockerを起動するようなものをDocker in Dockerと言うようです。