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

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

More than 3 years have passed since last update.

データコンテナ作成

$ 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` コンテナの全削除(実行中のコンテナはエラーが出る?)
akinoriikeda
日本各地を彷徨う、ソフトウェアエンジニアです。
mamezou
先進の工学的手法と独自のスタンス。お客様とともにビジネスを活かすITを追求します。
http://www.mamezou.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした