- Contents -
dockerを使えば、データベースサーバーも簡単に用意する事ができる。
ローカル開発する際にサクッとDBサーバーを用意できるぞ。
MySQLサーバーとMariaDBサーバーの2つを立ててみる方法を記載しておく。
DBサーバー立ててみる
mysqlサーバー
# Dockerイメージをダウンロード
docker pull mysql
# mysqlサーバーを立てる
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD="admin" -d -p 53306:3306 mysql
mariaDBサーバー
# Dockerイメージをダウンロード
docker pull mariadb
# mysqlサーバーを立てる
docker run --name mariadb-server -e MYSQL_ROOT_PASSWORD="admin" -d -p 63306:3306 mariadb
プロセス確認
起動しているdockerコンテナは docker ps
のコマンドで確認する事ができます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0dc4e9403a8 mariadb "docker-entrypoint..." About a minute ago Up About a minute 0.0.0.0:63306->3306/tcp mariadb-server
46e295d1f091 mysql "docker-entrypoint..." 18 minutes ago Up 12 minutes 0.0.0.0:53306->3306/tcp mysql-server
もしプロセスを確認する事ができない場合は、aオプションをつけて見てみると良いでしょう。
意図せず、終了してしまっているかもしれません。
docker ps -a
DBサーバに接続
起動が確認できたら、mysqlクライアントから接続できるか試してみましょう。
# mysqlへログイン
mysql -uroot -padmin -h 127.0.0.1 -P 53306
# ==> Server version: 5.7.18 MySQL Community Server (GPL)
# mariadbへログイン
mysql -uroot -padmin -h 127.0.0.1 -P 63306
# ==> Server version: 10.1.24-MariaDB-1~jessie mariadb.org binary distribution
docker を使うことで、違うバージョンのDBサーバーを立てる事が簡単に出来る。
起動中のコンテナにログイン
起動中のDBサーバーにシェルでログインする事もできる。
# mysql-serverコンテナへのログイン
docker exec -it mysql-server bash
#mariadb-serverコンテナへのログイン
docker exec -it mariadb-server bash
docker-compose
docker-composeを使って書くとこんな感じ
docker-compose.yml
mysql-server:
image: mysql
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
ports:
- "53306:3306"
environment:
MYSQL_ROOT_PASSWORD: admin
mariadb-server:
image: mariadb
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
ports:
- "63306:3306"
environment:
MYSQL_ROOT_PASSWORD: admin
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
を記載しておくと、DBの文字コードをutf8にしておく事ができる。
(これがないとlatin1というのになってしまう)
起動する
docker-compose up -d
Pulling mariadb-server (mariadb:latest)...
latest: Pulling from library/mariadb
10a267c67f42: Pull complete
c2dcc7bb2a88: Pull complete
17e7a0445698: Pull complete
9a61839a176f: Pull complete
64675690edb1: Pull complete
3de17e251488: Pull complete
f814b22b783e: Pull complete
527ba05ab100: Pull complete
eb46c338b799: Pull complete
fd9db88489b3: Pull complete
7a2c70913756: Pull complete
46185579593e: Pull complete
Digest: sha256:c987e36e50dcc02a17b8ea6319dd0f82d0e3ca13a85a3cc94f1857bf5561fd1c
Status: Downloaded newer image for mariadb:latest
Pulling mysql-server (mysql:latest)...
latest: Pulling from library/mysql
10a267c67f42: Already exists
c2dcc7bb2a88: Already exists
17e7a0445698: Already exists
9a61839a176f: Already exists
a1033d2f1825: Pull complete
0d6792140dcc: Pull complete
cd3adf03d6e6: Pull complete
d79d216fd92b: Pull complete
b3c25bdeb4f4: Pull complete
02556e8f331f: Pull complete
4bed508a9e77: Pull complete
Digest: sha256:2f4b1900c0ee53f344564db8d85733bd8d70b0a78cd00e6d92dc107224fc84a5
Status: Downloaded newer image for mysql:latest
Creating docker_mysql-server_1
Creating docker_mariadb-server_1
ローカルにないイメージはDocker hubから取得して起動してくれる。
プロセス確認
docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------
docker_mariadb-server_1 docker-entrypoint.sh mysqld Up 0.0.0.0:63306->3306/tcp
docker_mysql-server_1 docker-entrypoint.sh mysqld Up 0.0.0.0:53306->3306/tcp
停止
docker-compose down
Stopping docker_mariadb-server_1 ... done
Stopping docker_mysql-server_1 ... done
Removing docker_mariadb-server_1 ... done
Removing docker_mysql-server_1 ... done
停止してコンテナの削除までやってくれる。
文字コード設定について
2017-07-08追記
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
を追記しました。
デフォルトの latin1 という文字コード、
なんかよくみるけどなんじゃろな〜と思っていたが、
「ラテン文字第1部」というラテンアルファベットを使った文字コードだそうな。
文字コード周りはいつも苦戦する。
インサートした日本語文字はすべて「?????????」みたいになってしまっていた。