MySQL-Docker
-
Upload
multicolorworld -
Category
Engineering
-
view
585 -
download
3
description
Transcript of MySQL-Docker
MySQLとDockerのベターな関係
自己紹介
● 名前:岩崎知亮/MulticolorWorld● 某大学電気情報工学科所属● 普段はJavaでWebサービスつくったりしてる
今日話すこと
● 自分の運営するWebサービスにDockerを導入した時のMySQLの立ち位置の話
自サービスについて
● ツイ廃あらーと(https://twihaialert.net/)・Twitter連携サービス
・一日の終わりにその日のツイート数を通知
・一定post数ごとに通知
サービスの構成
● Nginx→Jetty↔MySQL↔定時処理● Web側、定時処理側ともJava● 定時処理でツイート数の集計と通知
Dockerの導入
● 他の勉強会でDockerに出会い導入してみようと考えた
Dockerについて
● コンテナー型仮想化におけるコンテナ管理ソフトウェア
● Immutable Infrastructureを実現できる● コンテナの構成をDockerfileというものに記述してGit
などで管理できる
Dockerfileの例
FROM ubuntu:14.04 RUN apt-get updateRUN apt-get install -y nginxRUN echo "daemon off;" >> /etc/nginx/nginx.confEXPOSE 80CMD ["nginx"]
Docker導入時に出てきた問題
● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?
Docker導入時に出てきた問題
● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?
DockerにMySQLを載せるべき?
● Dockerのコンテナは簡単に捨てたりするのが基本的
→MySQLは別のサーバにDB専用サーバとして立てるべき
→ホストOS上にDBを置くこともできる● どうしてもMySQLをDockerで管理したい場合
→できるだけMySQLのデータの永続性などを担保する
Docker導入時に出てきた問題
● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?
DockerfileでのMySQLの設定
● 今までMySQLをシェルから使う場合は、MySQLコマンドでログインしてやっていた
→Dockerfileではそれは使えない● RUNをひとまとめにすることで強引に設定を流し込む
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;”;
DockerfileでのMySQLの設定
● my.cnfにかける設定は事前にmy.cnfを用意しておいてそれをaddする
#DockerfileAdd my.cnf /etc/mysql/my.cnf
Docker導入時に出てきた問題
● そもそもDockerにMySQL載せるべき?● DockerfileにMySQLの設定をどう書く?● Dockerコンテナ上のMySQLデータの永続性は?
MySQL上のデータの永続性
● Dockerコンテナ上にMySQLを置くと決めた場合、コンテナが破棄されてもデータが永続するようにしなければならない
● なにかしらの方法でコンテナ外と同期を取るようにする
コンテナ外との同期方法
● 外部のサーバーからMySQLに接続して同期
→セキュリティ的に大丈夫?● ホストと同期
→Dockerのファイル共有を使う
外部サーバーからMySQLに接続
● 事前にMySQLに外部からアクセス可能なユーザーを作っておく
● Dockerコンテナの起動時にオプションで指定
● ホストに3306で接続することでコンテナのMySQLに届く
$docker run -it -p 3306:3306 …
ホストと同期
● Dockerの-vオプションでホストとコンテナ上のファイルを共有できる
● コンテナ上で定期的にmysqldumpを生成するか、MySQLの実ファイルを共有する
$docker run -it -v ~/mysqldump:/root/mysqldump … or$docker run -it -v ~/mysqllib/mysql:/var/lib/mysql …
まとめ
● できればコンテナ上にMySQLは載せないほうが良い● どうしても載せて管理したい場合はいろいろ試行錯誤
をする● もっと簡単にDockerとMySQLを連携させる方法があ
れば教えて下さい