Help us understand the problem. What is going on with this article?

【Windows】Dockerでmysqlのデータ領域をローカルにバックアップする際の注意点

More than 1 year has passed since last update.

結論

Windows上でdocoker-machineを使ってmysqlのデータ領域をローカルにバックアップするときは、トップレベルに定義したvolumesを使わないといけない(ただし無理やり回避することは可能)。
※docker for Mac の場合は問題なし

ダメな例

version: "3"
services:
    db:
        image: mysql:latest
        volumes:
            - ./.data/db:/var/lib/mysql
            - ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
        ・・・

OKな例

version: "3"
services:
    db:
        image: mysql:latest
        volumes:
            - db-data:/var/lib/mysql
            - ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
        ・・・
volumes:
    db-data:

問題

以下の記事を参考にdockerでwordpress開発環境の構築をしました。
docker-compose を使って WordPress テーマ開発環境を構築しよう – PSYENCE:MEDIA
上記の記事ではトップレベルのvolumes内で定義したvolumesを使う方法が紹介されていました
Docker の Data Volume まわりを整理する

この方法だと、ローカルの中で永続化されているのでdokcer-compose down -vなどでvolumeごと削除すると永続化したデータが消えます。
なので、更新するごとにdocker exec -it dbコンテナ名 sh -c 'mysqldump データベース名 -u データベースユーザ名 -pデータベースパスワード 2> /dev/null' > db-data/mysql.dump.sqlとして、データを保存しないといけません。

手元にデータを置いておきたかったのでトップレベルのvolumesを使わずに、ホスト側のディレクトリに保存することに。
公式のやり方もこっちだったので以下を参考に。
クイックスタート・ガイド:Docker Compose と Wordpress — Docker-docs-ja 17.06.Beta ドキュメント

しかし、このやり方だとWindowsでdocker-toolboxを使っている場合(Windowsは大体そうだと思いますが)上手くいきません。
(なお、手元のdocker for macでは上手く動きました)
以下の記事に詳しくまとまっています。無理やり回避する方法も載っているので、どうしてもhost側に置きたい場合はどうぞ。
docker composeでMySQLのデータ領域をローカルにマウントする | WEB EGG

まとめ

volumesトップレベル定義 host側のディレクトリにマウント(通常の方法)
Windows docker-toolbox ×
docker fot mac
koyo-miyamura
九州大学大学院システム情報科学府卒 面白法人カヤック・サーバサイドエンジニア note: https://note.mu/m_k9071 ポートフォリオ: https://koyo-miyamura.github.io/portfolio/
http://maple-daily.com/
fukuokaex
エンジニア/企業向けにElixirプロダクト開発・SI案件開発を支援する福岡のコミュニティ
https://fukuokaex.fun/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away