VSCode Remote Containerを使い始めたが、参画しているプロジェクトでは .devcontainer/ をgit管理していないため、リポジトリに影響がないようgitignoreしたいだけの話。

はじめに

M1 Macへの移行を機に、フルDockerを目指して試行錯誤している内の一幕。
この記事時点では、Docker Desktopは使わずに、lima + Dockerで環境構築している。
Remote Containersのバージョンは v0.209.6 となっている。

$ docker -v
Docker version 20.10.12, build e91ed5707e

$ docker-compose -v
Docker Compose version 2.2.3

$ lima -v
limactl version 0.8.0

Remote Containersで接続すると、特に設定しなくても ~/.ssh/known_hosts~/.gitconfig はコンテナ側にコピーされた。
なので、ホスト側で .gitconfigcore.excludesfile.gitignore_global を設定して、コンテナ側で .gitignore_global を配置して除外されるようにしていく。

.gitignore_global

まずは、ホスト側の .gitconfig に以下の設定を追記する。

[core]
  excludesfile = ~/.gitignore_global

ホスト側に .gitignore_global はなくても問題なく使えるはずだが、一応追加しておく。

.devcontainer/
docker-compose.override.*

コンテナ側の .gitignore_global は、Remote Containersの接続に使う docker-compose.yml で配置する。

services:
  app:
    command: |
      /bin/sh -c "echo '.devcontainer/' >> /root/.gitignore_global;
      echo 'docker-compose.override.*' >> /root/.gitignore_global;
      rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0';
      while sleep 1000; do :; done"

volumes でマウントすると、何故かコンテナ側がディレクトリになってしまうので、仕方なく command.gitignore_global を作成するようにした。ついでに docker-compose.override.yml も除外している。

.gitignore_global を使用せずに、 /root/.config/git/ignore に設定する方法もあるが、設定しても何故か反映されなかったので、苦肉でこのようにしている。

あとはコンテナをビルドし直せば配置されているはず…!
Command Palletから Rebuild Container で実行できる。

ビルド完了後、catコマンドで確認できる。

$ cat /root/.gitignore
.devcontainer
docker-compose.override.*

上記のような結果が返ってきたら、git status でも .devcontainer/ が除外されているはず。

おわりに

おそらくもっといい方法はありそうだけどとりあえず満足した。