はじめに
Docker + MySQLで開発環境用DBの作成 - もぐもぐプログラミング
こちらのブログ筆者に感謝!!!!
Dockerにて、MySQLの公式イメージを使って環境を構築したい。
公式イメージを使うだけであれば、Docker HubからイメージをPull、そして起動したコンテナ使えばOK。
ただ、そんなことをしたってデータは入ってないし、触ってもなんの意味もないので、MySQL公式のダミーデータ入れないと始まんないよなぁ・・・と思いやってみる。
使用するもの
-
Docker (Docker Compose)
Docker Composeについては、参考リンクに記載のさくらのナレッジのページhttps://knowledge.sakura.ad.jp/16862/がわかりやすいと思う。
-
MySQLイメージ(ver. 8.0を使用) https://hub.docker.com/_/mysql
OS : Linux Debian
筆者環境
-
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を用いてコンテナを起動するのであれば、下記のようなフォルダ/ファイル構成にする。
各ファイルを見ていく。
Docker-Compose.yml
Docker Composeでコンテナを管理起動する場合に、要となるファイルである。
# 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データベースである。これはもう公式から引っ張ってきただけ。
-- 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の内容が記載される
Dockerfile
MySQLのイメージを引っ張ってくるとともに、ポートの指定や設定ファイルの読み込みを行う。
#使うDockerイメージ
FROM mysql
#ポートを開ける
EXPOSE 3306
#MySQL設定ファイルをイメージ内にコピー
ADD ./my.cnf /etc/mysql/conf.d/my.cnf
#docker runに実行される
CMD ["mysqld"]
my.cnf
MySQLの文字コードを下記のように設定しておく。
[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で開発環境用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ファイルを管理することで、複数のアプリケーションも実行することが可能となる。