61
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerで作るGitHub環境

Posted at

やったこと

Gitで試したいことがあったので、Dockerコンテナ内にGitHubとの接続ができるGit環境を構築した。
また、コンテナを再作成しても、GitHubとの接続設定を引き継げるよう工夫したdockerfileを作成した。


作業内容

sshキー作成用コンテナの準備

Git環境を構築するコンテナの作成前に、GitHubとの接続用sshキーを作成します。
ちょっといい方法ではないかもしれませんが、コンテナを作成しなおすたびに、GitHubへsshキーを登録しなおさなくて済むよう、sshキーを先に作成し、コンテナ作成時に追加することでキーを使いまわします。

まず、ホストOSにてsshキー作成用コンテナを作成し、中に入ります。

ホストOS
$ docker run -itd --name make-ssh-key centos    # sshキー作成用コンテナの作成
$ docker exec -it make-ssh-key bash             # コンテナの中に入る

次に、sshキー作成用コンテナ内でsshキーを作成し、コンテナを抜け出します。

sshキー作成用コンテナ
$ yum -y update
$ yum -y install git
$ cd /root
$ ssh-keygen -t rsa                     # sshキーの作成 何もなければ3回Enterを押して完了
$ ssh -T git@github.com                 # 接続確認 yesを入力
$ ls -a /root/.ssh/                     # ファイルが存在することを確認
.  ..  id_rsa  id_rsa.pub  known_hosts
$ cat /root/.ssh/id_rsa.pub             # 表示されるキーをコピーしてGitHubに登録
$ exit                                  # コンテナを抜ける

cat /root/.ssh/id_rsa.pubで表示されるキーをGitHubへ登録します。
参考

そして、ホストOSへ、コンテナ内のsshキーをコピーすれば用意は終了です。
不要になったsshキー作成用コンテナは削除しておきます。

ホストOS
$ docker cp make-ssh-key:/root/.ssh .ssh    # コンテナからホストへコピー
$ ls -a                                     # コピーできたか確認
./  ../  .ssh/
$ docker rm -f make-ssh-key                 # sshキー作成用コンテナの削除
make-ssh-key
$ docker ps -a | grep make-ssh-key          # 削除できていることを確認

dockerfileの準備

以下のdockerfileを用意します。

dockerfile
FROM centos

RUN yum update -y
RUN yum install -y git

# sshキーの追加
ADD .ssh /root/.ssh
RUN chmod 600 /root/.ssh/*

WORKDIR /usr/local    # プロジェクトをクローンするパスを指定
RUN git clone git@github.com:${ユーザ名}/${プロジェクト}

コンテナイメージの作成

dockerfileが準備できたら、dockerfileと同じ階層に先ほど取得した.sshディレクトリを設置して、Dockerイメージを作成します。

$ ls -a                         # Dockerfileと.sshディレクトリを配置
./  ../  .ssh/  Dockerfile
$ docker build -t git-test .    # Dockerファイルからイメージ作成

コンテナの作成

ここまで用意できれば、あとは以下のコマンドで、Git環境が整ったコンテナを何度も作成することができます。

$ docker run -it --name git-test-container git-test

メモ

known_hostsファイルについて

sshキー作成用コンテナの準備にて、ssh -T git@github.comを実行するのは、接続テストのためだけではありません。

sshでは、一度接続したサーバの情報が~/.ssh/known_hostsに記録されます。
sshの初期設定では、このファイルに記録されていないサーバへ最初に接続しようとしたタイミングで、接続の許可を求めてきます。

今回のように、git cloneをコンテナイメージ構築時に行う場合、gitへの接続をしようとしたときに接続許可を求められると構築が失敗してしまいます。
そのため、すでに接続情報が記録されているknown_hostsファイルを取得するために、一度ssh -T git@github.comコマンドにてGitHubへの接続を行います。

.sshディレクトリのパーミッション

.sshディレクトリ配下のファイルパーミッションを変更しない場合、ssh接続時に以下のようなエラーが出てきます。

# ssh -T git@github.com
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:
RSA key fingerprint is MD5:
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/root/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/root/.ssh/id_rsa": bad permissions
Permission denied (publickey).

そのため、dockerfileでは、.sshディレクトリのパーミッションを以下のコマンドで変更しています。

dockerfile
RUN chmod 600 /root/.ssh/*`
61
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?