GitHub
docker

GitHubのプライベートリポジトリからDockerイメージにcloneする

GitHubのプライベートリポジトリからDockerイメージにcloneするのに苦労したのでメモしておきます。

主な手順は次の通りです。

  1. 鍵ペアを作る
  2. 公開鍵をGitHubリポジトリのdeploy keyとして登録する
  3. Dockerfileに、秘密鍵と公開鍵をイメージに取り込む記述を書く
  4. Dockerfileでgit cloneする記述を書く
  5. Dockerイメージをビルドする

鍵ペアを作る

GitHubのデプロイキーの仕組みを使ってcloneします。
デプロイキーにする鍵ペアを作ります。

まず、鍵のファイルを置くディレクトリを作ります。

$ mkdir ssh

鍵ペアを生成します。

$ ssh-keygen -t rsa -C foo@example.com
Generating public/private rsa key pair.
Enter file in which to save the key (/home/suzuki/.ssh/id_rsa): ssh/id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ssh/id_rsa.
Your public key has been saved in ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ivme5hlvowbsy+j9htos2E2nQVSzC5gww53weMd98nA foo@example.com
The key's randomart image is:
+---[RSA 2048]----+
|o.o + o S        |
|. . o + .        |
| . + o           |
|=ooB= + .. E     |
| =.O.B.o oo.     |
|.   .   o.       |
| o   + o .       |
|oo*.o* .         |
|  + B*=   +.     |
+----[SHA256]-----+

ディレクトリsshの下に、rsa_id(秘密鍵)とrsa_id.pub(公開鍵)の2つのファイルが作られます。

デプロイキーとして登録する

上記で作られた公開鍵を、GitHubのリポジトリにデプロイキーとして登録します。

Dockerfileに書く

DockerファイルのADDを使って、デプロイキーにした鍵ペアを、Dockerイメージに取り込みます。

# 鍵ペアを取り込む
RUN mkdir /root/.ssh
ADD ssh/id_rsa /root/.ssh
ADD ssh/id_rsa.pub /root/.ssh

# GitHubのサイトを登録しておく
RUN ssh -o StrictHostKeyChecking=no github.com; exit 0

# プライベートリポジトリからクローン
RUN git clone git@github.com:foo/quux.git /opt/quux

Dockerイメージを作る

$ docker build .