MySQL-Docker

21
MySQLとDockerの ベターな関係

description

MySQLとDockerのベターな関係

Transcript of MySQL-Docker

Page 1: MySQL-Docker

MySQLとDockerのベターな関係

Page 2: MySQL-Docker

自己紹介

● 名前:岩崎知亮/MulticolorWorld● 某大学電気情報工学科所属● 普段はJavaでWebサービスつくったりしてる

Page 3: MySQL-Docker

今日話すこと

● 自分の運営するWebサービスにDockerを導入した時のMySQLの立ち位置の話

Page 4: MySQL-Docker

自サービスについて

● ツイ廃あらーと(https://twihaialert.net/)・Twitter連携サービス

・一日の終わりにその日のツイート数を通知

・一定post数ごとに通知

Page 5: MySQL-Docker

サービスの構成

● Nginx→Jetty↔MySQL↔定時処理● Web側、定時処理側ともJava● 定時処理でツイート数の集計と通知

Page 6: MySQL-Docker

Dockerの導入

● 他の勉強会でDockerに出会い導入してみようと考えた

Page 7: MySQL-Docker

Dockerについて

● コンテナー型仮想化におけるコンテナ管理ソフトウェア

● Immutable Infrastructureを実現できる● コンテナの構成をDockerfileというものに記述してGit

などで管理できる

Page 8: MySQL-Docker

Dockerfileの例

FROM ubuntu:14.04 RUN apt-get updateRUN apt-get install -y nginxRUN echo "daemon off;" >> /etc/nginx/nginx.confEXPOSE 80CMD ["nginx"]

Page 9: MySQL-Docker

Docker導入時に出てきた問題

● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?

Page 10: MySQL-Docker

Docker導入時に出てきた問題

● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?

Page 11: MySQL-Docker

DockerにMySQLを載せるべき?

● Dockerのコンテナは簡単に捨てたりするのが基本的

→MySQLは別のサーバにDB専用サーバとして立てるべき

→ホストOS上にDBを置くこともできる● どうしてもMySQLをDockerで管理したい場合

→できるだけMySQLのデータの永続性などを担保する

Page 12: MySQL-Docker

Docker導入時に出てきた問題

● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?

Page 13: MySQL-Docker

DockerfileでのMySQLの設定

● 今までMySQLをシェルから使う場合は、MySQLコマンドでログインしてやっていた

→Dockerfileではそれは使えない● RUNをひとまとめにすることで強引に設定を流し込む

Page 14: MySQL-Docker

DockerfileでのMySQLの設定(ユーザー)

#Dockerfile

FROM ubuntu:latest

RUN apt-get install -y mysql-server-5.6

RUN (/usr/bin/mysqld_safe &); sleep 5; mysql -u root -e "create user 'hoge'@'localhost' identified by 'fuga';";

RUN (/usr/bin/mysqld_safe &); sleep 5; mysql -u root -e “create database piyo;”;

Page 15: MySQL-Docker

DockerfileでのMySQLの設定

● my.cnfにかける設定は事前にmy.cnfを用意しておいてそれをaddする

#DockerfileAdd my.cnf /etc/mysql/my.cnf

Page 16: MySQL-Docker

Docker導入時に出てきた問題

● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?

Page 17: MySQL-Docker

MySQL上のデータの永続性

● Dockerコンテナ上にMySQLを置くと決めた場合、コンテナが破棄されてもデータが永続するようにしなければならない

● なにかしらの方法でコンテナ外と同期を取るようにする

Page 18: MySQL-Docker

コンテナ外との同期方法

● 外部のサーバーからMySQLに接続して同期

→セキュリティ的に大丈夫?● ホストと同期

→Dockerのファイル共有を使う

Page 19: MySQL-Docker

外部サーバーからMySQLに接続

● 事前にMySQLに外部からアクセス可能なユーザーを作っておく

● Dockerコンテナの起動時にオプションで指定

● ホストに3306で接続することでコンテナのMySQLに届く

$docker run -it -p 3306:3306 …

Page 20: MySQL-Docker

ホストと同期

● Dockerの-vオプションでホストとコンテナ上のファイルを共有できる

● コンテナ上で定期的にmysqldumpを生成するか、MySQLの実ファイルを共有する

$docker run -it -v ~/mysqldump:/root/mysqldump … or$docker run -it -v ~/mysqllib/mysql:/var/lib/mysql …

Page 21: MySQL-Docker

まとめ

● できればコンテナ上にMySQLは載せないほうが良い● どうしても載せて管理したい場合はいろいろ試行錯誤

をする● もっと簡単にDockerとMySQLを連携させる方法があ

れば教えて下さい