GitHubのプライベートリポジトリからDockerイメージにcloneするのに苦労したのでメモしておきます。
主な手順は次の通りです。
- 鍵ペアを作る
- 公開鍵をGitHubリポジトリのdeploy keyとして登録する
- Dockerfileに、秘密鍵と公開鍵をイメージに取り込む記述を書く
- Dockerfileでgit cloneする記述を書く
- 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 .