はじめに
Docker の volume をコピーしたい場面に遭遇したので、その方法を調べたので備忘録として書きます。
環境
- Windows11: 22H2(22621.1105)
- WSL: Ubuntu-20.04 Version 2
- Ubuntu: 20.04.5 LTS
- Docker: 20.10.23(build 7155243)
- Docker Compose: 2.15.1
結論
WSL2 環境化では以下のディレクトリに配置されているのでディレクトリごとコピーします。おそらく Linux 環境下では同じ場所だと思います。
$ sudo cp -rp /var/lib/docker/volumes/source_volume /var/lib/docker/volumes/target_volume
オプション | 意味 |
---|---|
-R, -r | コピー元にディレクトリを指定した場合、サブディレクトリも含めてコピーする |
-p | パーミッションと所有者とタイムスタンプを保持する |
余談
今までは特に意識していなかったのですが、volume の名前を明示的に指定していなければ、docker-compose.yml のあるディレクトリ名_volume 名が割り当てられているようで、長い名前だと非 常に判断がし辛い状況に陥っていました。
それからはdocker-compose.yml
の指定で volume の名前を指定して運用するようにしています。
# DBの記述の例
db:
image: mysql:5.7
container_name: test-db
volumes:
- db-store:/var/lib/mysql # volumeにマウントする設定
environment:
TZ: "Asia/Tokyo"
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
ports:
- 3306:3306
# ~ 中略 ~
volumes:
db-store: # マウントするvolume
name: my_db_volume # volume名を指定。docker volume ls コマンドではこの名前が表示される