LoginSignup
246
218

DockerでMySQLを使ってみる

Last updated at Posted at 2019-06-29

はじめに

Docker + MySQLで開発環境用DBの作成 - もぐもぐプログラミング
こちらのブログ筆者に感謝!!!!

Dockerにて、MySQLの公式イメージを使って環境を構築したい。

公式イメージを使うだけであれば、Docker HubからイメージをPull、そして起動したコンテナ使えばOK。

ただ、そんなことをしたってデータは入ってないし、触ってもなんの意味もないので、MySQL公式のダミーデータ入れないと始まんないよなぁ・・・と思いやってみる。

使用するもの

筆者環境

  • macOS mojave 10.14.4

  • Docker Desktop 2.0.0.3 (31259)

  • Docker Compose: 1.23.2

構築① ファイルの準備

Docker Compose 不使用

Docker Composeを使用せずに、構築するには下記のCommandを順に入力していけば可能である。

# Docker-hubからMySQLのイメージをインストールする
$ docker pull mysql

# インストールしたイメージから、コンテナを起動・作成する
# MYSQL_ROOT_PASSWORDにログインする際のパスワードを設定する
$ docker run -it --name test-wolrd-mysql -e MYSQL_ROOT_PASSWORD=mysql -d mysql:latest

$ docker exec -it test-wolrd-mysql bash -p

# MySQLのコンテナにログインする
$ mysql -u root -p -h 127.0.0.1

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.16 MySQL Community Server - GPL

Copyright (c) 2000, 2019, 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 Compose 使用

まず、Docker-Composeを用いてコンテナを起動するのであれば、下記のようなフォルダ/ファイル構成にする。

フォルダの名前は、任意の名称で問題ない。
image.png

各ファイルを見ていく。

Docker-Compose.yml

Docker Composeでコンテナを管理起動する場合に、要となるファイルである。

Docker-Compose.yml
# versionは3系が最新版で、versionによって書き方が異なる
version: "3"
services:
  mysql:
    build: ./mysql/db    #Dockerfileからビルドすることを示す
    volumes:
      - ./mysql/DB:/docker-entrypoint-initdb.d  #初期データをマウントする場所
    image: original_mysql_world # イメージの名前
    environment:
      - MYSQL_ROOT_PASSWORD=****   #コンテナ内のMySQLを起動する際のパスワードを設定

コメントで大まかに把握できるように記載しているつもりだが、詳細はDocker Composeのリファレンスを見たほうが早い。
Compose ファイル・リファレンス

world.sql

こいつは、MySQLのサンプルデータのworldというSQLデータベースである。これはもう公式から引っ張ってきただけ。

world.sql
-- MySQL dump 10.13  Distrib 5.1.51, for pc-linux-gnu (i686)
--
-- Host: 127.0.0.1    Database: world
-- ------------------------------------------------------
-- Server version       5.1.51-debug-log

/*以下Databaseの内容が記載される

MySQL Documentation

Dockerfile

MySQLのイメージを引っ張ってくるとともに、ポートの指定や設定ファイルの読み込みを行う。

Dockerfile
#使うDockerイメージ
FROM mysql

#ポートを開ける
EXPOSE 3306

#MySQL設定ファイルをイメージ内にコピー
ADD ./my.cnf /etc/mysql/conf.d/my.cnf

#docker runに実行される
CMD ["mysqld"]

my.cnf

MySQLの文字コードを下記のように設定しておく。

my.cnf
[mysqld]
character-set-server=utf8
    
[mysql]
default-character-set=utf8
    
[client]
default-character-set=utf8

構築② 起動

ターミナルからは、"docker-mysql"フォルダに移動した後、下記のCommandを実行する。

# イメージのビルド
$ Docker-Compose build

# コンテナの作成
$ Docker-Compose up -d

# 起動したコンテナにログイン
$ docker exec -it Docker-mysql_mysql_1 bash -p

# MySQLを起動
$ mysql -u root -p -h 127.0.0.1

# この後パスワードを入力して完了

参考

Compose ファイル・リファレンス - Docker-docs-ja

Docker入門(第六回)〜Docker Compose〜 - さくらのナレッジ

docker-compose.ymlの書き方について解説してみた

DockerのMySQLに初期データを投入する

docker-compose でMySQL環境簡単構築

Docker + MySQLで開発環境用DBの作成 - もぐもぐプログラミング

docker-composeを使うと複数コンテナの管理が便利に - Qiita

Docker MySQLコンテナ起動時に初期データを投入する - Qiita

[Docker Compose で複数コンテナ構築&管理 - Qiita]
(https://qiita.com/prgseek/items/e557a371d7bd1f57b9b1)

Docker-Composeに関してメモ

Docker-Composeで起動する場合は、複数のコンテナもまとめて起動することができる。

1つのアプリケーションで複数のコンテナを使用したり、各コンテナにオプションを設定する場合には有効である。

また、Docker-Composeはyamlファイルが保存されたディレクトリに移動した上で、Docker-Composeのコマンドをターミナルで実行する。
各アプリケーションでフォルダを分けてymlファイルを管理することで、複数のアプリケーションも実行することが可能となる。

246
218
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
246
218