Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
42
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@akinoriikeda

dockerで、いい感じでMySQL環境を作る

データコンテナ作成

$ docker run -d -v /var/lib/mysql --name localStorage busybox true
オプション / パラメータ 内容
-d コンテナのバックグラウンド実行指定。
-v /var/lib/mysql ホストにマウントするコンテナ側のディレクトリ(MySQLデータディレクトリ)。
--name localStorage ストレージコンテナの名前。
busybox データコンテナ用超軽量イメージ
true busybox内で実行するコマンド(コンテナとして存在するだけなので、何もせずに正常終了させる)。

データコンテナを使うコンテナ作成

$ docker run -d --volumes-from localStorage -e MYSQL_ROOT_PASSWORD=root --name sampleDB mysql:5.6
オプション / パラメータ 内容
-d 同上。
--volumes-from localStorage ストレージコンテナ指定。さっき作ったデータコンテナを今からrunするコンテナにマウントする。
-e MYSQL_ROOT_PASSWORD=root MySQL rootパスワード設定(rootの部分はパスワード文字列そのもの)。
--name sampleDB runするコンテナの名前。
mysql mysqlイメージの選択。

因みに、

$ docker run -d --volumes-from localStorage -v /host/path/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name sampleDB mysql

みたいにすると、

オプション / パラメータ 内容
-v /host/path/conf:/etc/mysql/conf.d ホスト上の /host/path/conf/ をコンテナの /etc/mysql/conf.d/ にマウントしてくれる。

となります。ローカルコンフィグレーションには便利。nfsマウントのdocker版みたいな感じ(逆向き)。

mysqlのコンテナに接続

$ docker ps -l -q
0f1e506b00ec
$ docker exec -it 0f1e506b00ec bash
root@0f1e506b00ec:/#

バックアップをホスト側に行う

sampleDBの起動中に行う。

$ docker run --rm --volumes-from localStorage -v $(pwd):/backup busybox tar cvf /backup/backup.tar /var/lib/mysql
オプション / パラメータ 内容
--rm プロセスが終わると、その後直ぐにコンテナも終了する。
--volumes-from localStorage 起動中のデータコンテナ名。
-v $(pwd)/backup:/backup ホスト上の ./backup/ を、コンテナ上の /backup/ にマウントする。
busybox データコンテナ用超軽量イメージ。
tar cvf /backup/backup.tar /var/lib/mysql コンテナ上の /var/lib/mysql/ を tar cvf して、/backup/backup.tar に書き出す(つまり、マウント先のホスト上の ./backup/backup.tar へ書き出す)。

ホストにあるバックアップからのリストア

$ docker run --rm --volumes-from new_localStorage -v $(pwd):/backup busybox cd /var/lib/mysql && tar xvf /backup/backup.tar
オプション / パラメータ 内容
--rm プロセスが終わると、その後直ぐにコンテナも終了する。
--volumes-from localStorage 起動中のデータコンテナ名。
-v $(pwd):/backup ホスト上の . を、コンテナ上の /backup/ にマウントする。
busybox データコンテナ用超軽量イメージ。
cd /var/lib/mysql && tar xvf /backup/backup.tar コンテナ上の /var/lib/mysql/ にcdで移動し、 tar xvf で/backup/backup.tar を解凍。

おまけ

エイリアスを切った感じでdockerコマンドの私的まとめ。

$ alias CONTAINER_ID='docker ps -l -q' #現在動作中
docker command 内容
docker stop CONTAINER_ID コンテナを停止する
docker start CONTAINER_ID コンテナを起動する
docker restart CONTAINER_ID コンテナを再起動する
docker attach CONTAINER_ID 起動中のコンテナに接続する
docker cp CONTAINER_ID:/etc/passwd . コンテナ内のファイルをホストにコピーする
dockr rm CONTAINER_ID コンテナを削除する
docker inspect CONTAINER_ID コンテナの情報(IPなど)を表示する
docker logs CONTAINER_ID コンテナのログを表示する
docker top CONTAINER_ID コンテナのプロセスを表示する
docker command 内容
docker ps 起動中のコンテナを表示する(停止中のコンテナも表示するには -a オプション)
docker rm `docker ps -a -q` コンテナの全削除(実行中のコンテナはエラーが出る?)
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
42
Help us understand the problem. What are the problem?