Dockerビルド時にプライベートリポジトリをクローンする方法は色々考えられる.
- 秘密鍵を
ADD
してリポジトリをクローン, 終えたら削除(ssh経由) --build-arg
で秘密鍵情報を渡してリポジトリをクローン, 終えたら削除(ssh経由)--build-arg
でユーザ名, パスワードを渡してリポジトリをクローン(https経由)- ユーザ名, パスワードを記した
~/.netrc
をADD
してリポジトリをクローン, 終えたら削除(https経由)
上記で挙げた方法のなかには, セキュリティの点から好ましくないものもある.
ここでは, GitHubのPersonal access tokenを使って
Dockerビルド時にプライベートリポジトリをクローンする方法(https経由)について説明する.
GitHubのプライベートリポジトリにアクセスする手段は2つである.
- ssh経由でアクセス
- https経由でアクセス
後者のhttps経由では, ユーザ名とパスワードの入力を求められるが,
パスワードの代わりに Personal access token を使うことができる.
このトークンを発行するときに, リポジトリのRead権限などを事細かに選択することができる.
- Settings > Developer settings を開く
- 左のメニューから Personal access tokens を選択
- Generate new token でトークンを発行
flaskで簡単なアプリケーションサーバを作り, uwsgi+NGINXでデプロイする例を考える.
リポジトリ(simpleapp)構成は下記のものを想定する.
[simpleapp]
|- Dockerfile
|- docker-compose.yml
|- server.conf
|- server.py
+- uwsgi.ini
この例では, DockerfileのARGにて github_username
と github_password
を指定するようになっている.
docker-composeを使用する場合は, 設定ファイルの所定の場所に, ユーザ名と上の手順で発行したPersonal access tokenを指定する.
docker-composeを使用しない場合は, --build-arg
でユーザ名とPersonal access tokenを指定する.
$ docker build --build-arg github_username=USERNAME --build-arg github_password=PERSONAL_ACCESS_TOKEN simpleapp ./
- 秘密鍵を作る場合どうしても適当なファイルを作る必要があるが, https経由であればuriでユーザ名とパスワードを指定できるので安心(?)
- パスワードは漏れたらアカウントが乗っ取られるが, Personal access tokenは発行時に権限を設定できるので, 設定した範囲までしか情報が漏れない(?)
- 再発行・削除が簡単にできる
- GitHubじゃないと使えない
Dockerビルド時にプライベートリポジトリをクローンする方法として, GitHubのPersonal access tokenを使用した方法を紹介した.
鍵情報を ADD
する, 平文のパスワードを保存するよりかは安全なような気がしている.
GitHubリポジトリではこうしたやり方が通用するが, bitbucketや他のホスティングでも同じようなやり方があるかは不明である...