Dockerをinstall後にMySQLイメージをpullして起動 初回SQLの読み込みにとデータの永続化までに行なったことのメモです。
Dockerのinstall
公式サイトよりGet Docker fot Macをクリックしてinstallします。
サンプル用のディレクトリ作成
Dockerのinstall後にサンプル用ディレクトリを作り移動します。
$ mkdir sample
$ cd sample
$ ls
現状lsしても何も表示されません。
MySQLイメージをpull
今回はdocker-composeにてpullなどを行います。
docker-compose.yml
というファイルを作成し以下の様に記載し$ docker-compose up
で起動します。
version: '2'
services:
db:
image: mysql:5.6
ports:
- "8888:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORDなどはお好きな値を設定します。
MYSQL_DATABASEに設定した名前でデータベースが作成されます。
$ docker-compose up
Starting sample_db_1
Attaching to sample_db_1
...
起動する際に以下の様なエラーが出た場合はdocker-compose.yml
のMYSQL_USER: 値
を削除すると上手く起動します。
既に存在するユーザー名を設定した場合にエラーが出るようです。
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
...
変更後MYSQL_USER: 値
を削除
version: '2'
services:
db:
image: mysql:5.6
ports:
- "8888:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_PASSWORD: root
MySQLにログイン
$ docker-compose up
したまま、別のターミナルなどでログインしてみます。
$ docker ps
で起動しているコンテナのIDを取得してログインします。
$ docker ps
CONTAINER ID IMAGE
xxxxx mysql:5.6
$ docker exec -it xxxxx(CONTAINER IDの値) bash
root@xxxxx(CONTAINER IDの値):/# mysql -u root -p
Enter password: 設定したパスワードを入力
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
MYSQL_DATABASE:
に設定したデータベースが作成されています。
初回SQLの読み込み
初回のみSQLを読み込みするようsqlディレクトリ以下にsample.sqlを追加しdocker-compose.yml
に設定を加えます。
sample/
├ sql/
│ └ sample.sql
└ docker-compose.yml
use test;
CREATE TABLE user (id int);
volumes:
部分に- "./ディレクトリ:/docker-entrypoint-initdb.d"
を指定します。
指定したディレクトリ以下にある.sql
などを読み込んでくれます。
今回はsql以下にあるsample.sql
を読み込みます。
version: '2'
services:
db:
image: mysql:5.6
volumes:
- "./sql:/docker-entrypoint-initdb.d"
ports:
- "8888:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_PASSWORD: root
$ docker-compose up
別ターミナルでMySQLにログイン
mysql> show tables from test;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
データの永続化
今までの状態でテーブルにデータを追加したり削除しても、$ docker-compose down
してしまったらデータが消えてしまいます。
永続化するためにdocker-compose.yml
に設定を加えます。
version: '2'
services:
db:
image: mysql:5.6
volumes:
- "./db:/var/lib/mysql"
- "./sql:/docker-entrypoint-initdb.d"
ports:
- "8888:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_PASSWORD: root
"./ディレクトリ:/var/lib/mysql"
を加えることでデータの永続化が出来ます。
今回の場合は
sample/
├ sql/
│ └ sample.sql
└ docker-compose.yml
の状態から設定したdb
ディレクトリが作成され以下にデータベースのtest
などのディレクトリが自動的に作成されます。
sample/
├ sql/
│ └ sample.sql
├ db/
│ └ mysql/
│ └ performance_schema/
│ └ test/
└ docker-compose.yml