DockerでMySQLサーバーを用意する。

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部」というラテンアルファベットを使った文字コードだそうな。
文字コード周りはいつも苦戦する。
インサートした日本語文字はすべて「?????????」みたいになってしまっていた。

コメントを残す