2017/03/30(木)Docker で MySQL!
まえがき
久しぶりの記事が作業記録ですこんにちわ。実はこのWebサーバはとある人に一角を貸しているのです。
そしてその人に「MySQLを入れてくれ」と言われたのです。
MySQL…なんかすごそうだけどよくわからないアレ…
でも例のコレクション整理プロジェクトでもDBをブンブンする必要あるし、ちょうどいいから入れてみよう。
仕事だとテスト担当でSQL触る機会なんかなくて実はMySQLを触るのは(研修以外で)初
そんなかんなで、MySQLを使えるようにした記録です。
方針
- とりあえず今日はけもフレ最終話リピートしすぎて寝る時間なのでさくっと終らせます
- いま持ってる技術を使います
- とりあえずアクセスできるところまで。中身はどうせ他の人が入れるんだし…
- スペックは保証しない
使うもの
- Docker
で
3/29
user@ubuntu-docker:~$ docker pull mysql Using default tag: latest latest: Pulling from library/mysql 6d827a3ef358: Pull complete ed0929eb7dfe: Pull complete 03f348dc3b9d: Pull complete fd337761ca76: Pull complete 7e6cc16d464a: Pull complete ca3d380bc018: Pull complete 3fe11378d5c0: Pull complete 2b5dfd325645: Pull complete b54281d17fbe: Pull complete 9a5cfd2d8db6: Pull complete a371b9bf0e19: Pull complete Digest: sha256:b39e58483853ecd03160f9bfdc8d3ecb0be9071fdbbe5484d6a115677b62c84e Status: Downloaded newer image for mysql:latest user@ubuntu-docker:~$ docker run --name mysqld -e MYSQL_ROOT_PASSWORD=ぱすわーど -d mysql (コンテナID) user@ubuntu-docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES (ID) mysql "docker-entrypoint..." 19 seconds ago Up 18 seconds 3306/tcp mysqld (以下略)終わり。
そんでもって接続用のクライアントコンテナと言うものを作って…アクセス出来たから立ってはいるんですが…
このDBがWeb鯖と同じ場所なら問題ないんですが、dockerで遊ぶようのUbuntu上(同じLAN、同じハイパーバイザ上だが)なんですね。
LAN内から接続できるようにします
user@ubuntu-docker:~$ docker run --link mysqld:mysql -it --rm mysql bash root@8fa973d43269:/# mysql -u root -p -h $MYSQL_PORT_3306_TCP_ADDR Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.17 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>無事接続できたらユーザを見る
mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | root | % | | mysql.sys | localhost | | root | localhost | +-----------+-----------+ 3 rows in set (0.00 sec) mysql> ||< ここにLAN環境からアクセスできるようにユーザを追加 >|?| mysql> GRANT ALL PRIVILEGES ON *.* TO user@"192.168.1.%" IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> select user,host from mysql.user; +-----------+-------------+ | user | host | +-----------+-------------+ | root | % | | user | 192.168.1.% | | mysql.sys | localhost | | root | localhost | +-----------+-------------+ 4 rows in set (0.00 sec)これでできた…と思う。
それでMacから接続を試みる。
まずはホームブリューからクライアントをインストール
MBP:~ user$ brew install mysql --client-only (中略) 🍺 /usr/local/Cellar/mysql/5.7.17: 321 files, 234.4MB MBP:~ user$ mysql -h192.168.1.19 -u user -p Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.19' (61)あれれおかしいね
というところで寝る時間はとっくに過ぎているのでこの辺で一度ストップ。
4/2再開
ちょっと日が空いたけど再開する。とりあえずdocker restartしてdocker psを見る
user@ubuntu-docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4bef7b372a65 mysql "docker-entrypoint..." 3 days ago Up 4 seconds 3306/tcp mysqld b2bd2761985f sameersbn/redmine:3.3.1-1 "/sbin/entrypoint...." 8 days ago Up 3 days 443/tcp, 0.0.0.0:10080->80/tcp redmine_redmine_1 edc388a32a9f sameersbn/postgresql:9.5-4 "/sbin/entrypoint.sh" 8 days ago Up 3 days 5432/tcp redmine_postgresql_1ほかにもれっどまいんが立ち上がってたりします。
こちらを見ると分かるんですが、docker-composeで上げているれっどまいんはポートフォワードされているのがわかると思います
コレじゃないかな?
ということで以下を実行
user@ubuntu-docker:~$ docker stop mysqld mysqld user@ubuntu-docker:~$ docker run --name mysqld2 -e MYSQL_ROOT_PASSWORD=ぱすわーど -p 33366:3306 -d mysql 1d7bbfa19087642db79e5f143110f62880deba280c2523160ce1b44e4df9ab20 user@ubuntu-docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d7bbfa19087 mysql "docker-entrypoint..." 10 seconds ago Up 8 seconds 0.0.0.0:33366->3306/tcp mysqld2 b2bd2761985f sameersbn/redmine:3.3.1-1 "/sbin/entrypoint...." 8 days ago Up 3 days 443/tcp, 0.0.0.0:10083->80/tcp redmine_redmine_1 edc388a32a9f sameersbn/postgresql:9.5-4 "/sbin/entrypoint.sh" 8 days ago Up 3 days 5432/tcpこんな感じでどうだろうか。
そんでMacから接続してみる
MBP:~ user$ mysql -h192.168.1.19 -uroot -p -P33366 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.17 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>わーいできた
外から接続するときはちゃんとポートフォワードを設定してやらないといけないみたいですね。
まとめ
さくっと終らせますという方針はどこかへ行ってしまった。とりあえず、今回の反省点として
- 時間がないときに慌ててやらない
- ポート設定は重要
- そもそもdockerはいいけどハイパーバイザのメモリは大丈夫?
だいいち、dockerのMySQLてこうやって使うものでは無いんだよなあ…
本来、他のコンテナから接続するものだよなぁ…大丈夫かしら
おわり
参考
Dockerの公式MySQLイメージの使い方を徹底的に解説するよ(俺得)MySQLに、クライアントでリモート接続する時の設定
ホスト上にコンテナのポートを割り当て