プロトタイプで作っていたサービスで、正式にサービス名とドメインが決定したのでプロジェクト名とグループ名を変更し、URLも合わせて変更したい。
新たにチームに加わったり保守してくれる人が違和感の無いように。
新たにリポジトリを作り直してもいいんだけども。
プロジェクト名を変更すると(ディレクトリ名かもしれない)、docker volume name も変わるので注意。
volumeしたデータが消えると困る場合は、volumeの移行もしておく。
難しくないので。
GitLabのプロジェクト名を変更する。
プロジェクトTOP > Settings > General で Project name を変更する。
これだけではURLは変わらないので、
プロジェクトTOP > Settings > General > Advanced で Change path を変更。
ここで、グループ名も変えねばと気づく。
GitLabのグループ名を変更する。
グループTOPから、プロジェクト名と同様に変更する。
ローカルと連携
これで、新たにcloneすると新しいプロジェクト名、URLが反映される。
既存のディレクトリとgitのローカルリポジトリがある場合は、ディレクトリ名とremoteのURLを変えておいたほうが良い。
# 既存のリモートリポジトリを確認。
$ cd [service directory]
$ git remote -v
origin [old project url] (fetch)
origin [old project url] (push)
# URL変更
$ git remote set-url origin [new project url]
# 確認
$ git remote -v
origin [new project url] (fetch)
origin [new project url] (push)
ちなみに、URL変更しなくてもbranchをpushできる。
その際に警告を出してくれるので、言われたとおりにすると良い。
$ git push origin feature/test
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for feature/test, visit:
remote: https://[gitlab domain]/gitlab/[new group name]/[new project name]/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2Ftest
remote:
remote: Project '[old group name]/[old project name]' was moved to '[new group name]/[new project name]'.
remote:
remote: Please update your Git remote:
remote:
remote: git remote set-url origin git@git.orso.jp:[new group name]/[new project name].git
必要であれば、Dockerfileのディレクトリ名やdocker-compose.ymlやconfigファイルのサービス名を変更する。
個人的には共通して使えるように汎用的な名前にして、プロジェクトごとに変えないような運用にしている。
docker volume nameを変更する
ここで docker-compose up すると、docker image name が変わっているのでbuildが走る。
そして、DBにつながらないエラーが発生する。
(DBがない場合createする処理を入れている場合はサービスが立ち上がるが、データがまっさらになっていることに気づくはず。)
docker volume nameが変わり、新たなvolumeが作られたため。
以前のvolumeを使うために、volume name の変更を行う。
もう少し正確に言うと、volume name の変更はできないようなので、「新しい Volume に全てコピーして古い方を消す」操作を行う。
$ docker volume ls
......
local ............
local [old project name]_data
local [new project name]_data
......
# 一応新しくできたvolumeを消しておく。(必要ないかも)
$ docker volume rm [new project name]
$ docker volume create --name [new project name]
$ docker run --rm -it -v [old project name]:/from -v [new project name]:/to alpine sh -c "cp -av /from/* /to"
$ docker volume rm [old project name]
ちなみに、私のdocker-compose.ymlのvolume部分はこんな感じ。
version: '3'
services:
db:
volumes:
- data:/var/lib/mysql
volumes:
data:
driver: local
これで元のDBに接続するようになった。
色々やっているといつの間にか docker-compose.override.yml が失くなっていた。
いつ消えたんだろう。。
fetchしたときかな。。
参考
- リモートの URL の変更 - GitHub Docs
- Docker で Volume 名を変更する - Qiita
- Docker の Volume がよくわからないから調べた - Qiita
- Docker におけるデータ管理 | Docker ドキュメント
- [Docker for Mac] Docker Volumeの実態がどこにあるのか、探してみた|w0o0ps|note