Dockerでvolumeを複製する

Dockerでvolumeを複製する

はじめに

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 コマンドではこの名前が表示される

参考