こんにちは!
seiです!
Dokcerコンテナを仮想環境としてチーム開発するときにgitが使えなくて、てこずったので備忘録です!
環境
ホストマシン: WSL:Ubuntu 20.04.2 LTS
VSCodeの拡張機能「dev container」を用いて開発
コンテナの起動はdocker-compose.yamlファイルから
コンテナにgitをインストールする
Dockerfile
from python3.8
RUN apt-get update && apt-get install -y git
ENTRYPOINT ["/bin/bash"]
コンテナ内にapt install でgitをインストールしましょう。
また、コンテナ内でシェルが開けるようにENTRYPOINTを設定しています。
docker-compose.yamlファイル
version: '2'
services:
api:
build: . //このディレクトリ内にあるdockerファイルを用いる
ports:
- "8000:8000"
volumes:
- ./:/var/www/
tty: true
stdin_open: true
コンテナ内でbashシェルを用いて対話的に操作したいのでtty:trueとstdin_open:trueを設定します。
コンテナに入ってバックエンドサーバを立ち上げたかったのでこのようにしています。
githubに接続する設定を行う
githubからpushしたり、pullしたりする場合はsshの秘密鍵が必要です。
しかし、以下のようにしても秘密鍵はCOPYされません。
COPY .ssh var/www/.ssh
# .ssh
- .ssh
- id_rsa.pem
- known_hosts
# /var/www/.ssh
- .ssh
- known_hosts // id_rsa.pemはコピーされない!
これは秘密鍵が含まれたイメージを誤って配布しないための仕様です。
もし、秘密鍵が含まれたdockerイメージをdocker_hubなどに公開してしまったら…
業務でやらかしたと思うと震えが止まりません(笑)
僕のプロジェクトの構成は以下のような感じでした。
/project-root
│
├── .devcontainer
│ ├── devcontainer.json
│
├── docker-compose.yaml
├── Dockerfile
│
├── .ssh
│ ├── id_rsa.pem
│ ├── config
│
└── app
├── APIサーバのディレクトリ達
使用する秘密鍵を指定する
git pushやgit pullでgithubと通信するときに使用される秘密鍵は、デフォルトでは.sshフォルダの中を見に行きます。
コンテナ内だとrootユーザでログインするので、以下のフォルダの秘密鍵を使用します。
/root/.ssh/id_rsa
先ほどのプロジェクトルートにある
.sshフォルダの中にconfigファイルを作って使用する秘密鍵を指定してあげます。
.ssh/config
Host github.com
HostName github.com
IdentyFile /var/www/.ssh/id_rsa
from python3.8
RUN apt-get update && apt-get install -y git
// 設定ファイルをコピーする
COPY ./ssh/conig /root/.ssh/config
ENTRYPOINT ["/bin/bash"]
お疲れ様でした!これでコンテナ内でgitが使えるはずです!
コンテナ内でもgitを使えるようにするだけで結構大変でした。僕は秘密鍵がコピーできないことを知らなかったので、そこではまってしまいました。
今までのプロジェクトでは、dockerコンテナを仮想マシンとして使っているケースはまだまだ少ないように感じます。
チームメンバーが全員VScodeを使っているのであれば、コンテナを仮想マシンとして使用することで拡張機能までそろえることができるのでとても便利です。
virtual box等に比べてもOSはホストマシン側にあるDokcerのほうがメモリ使用量も少なく、軽いのでとても使いやすいです。
もっとdockerコンテナでの開発が進めば良いなと思っています。