LoginSignup
0
0

More than 1 year has passed since last update.

DockerによるMySQLお勉強環境の簡単立ち上げ

Posted at

docker-composeを使ったMySQLお勉強環境の構築

  • Dockerを使ってデータベースのお勉強環境を簡単に立ち上げる方法を確率することが目的
  • 基本上からコピペで作成できます
  • Jupyter Notebookにまとめているので、要望あればgithubに公開します

事前準備

command
mkdir -p mysql
mkdir -p mysql/db

docker-compose.yml 作成

command
PORT_HOST="13306"
PORT_CONTAINER="3306"
PASSWORD="mypass"
command
cat << ETX > docker-compose.yml
version: '3'
services:
  mysql:
    build: ./mysql/      #Dockerfileからビルドすることを示す
    ports:
      - "${PORT_HOST}:${PORT_CONTAINER}"     #ホストの33060番ポートとコンテナの3306番ポートをマッピング
    volumes:
      - ./mysql/db:/docker-entrypoint-initdb.d  #初期データ
    environment:
      - MYSQL_ROOT_PASSWORD=${PASSWORD}   #環境変数
ETX
cat docker-compose.yml

Dockerfile

command
cat << ETX > mysql/Dockerfile
#Dockerfile

#使うDockerイメージ
FROM mysql

#ポートを開ける
EXPOSE ${PORT_HOST}

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

#docker runに実行される
CMD ["mysqld"]
ETX
cat mysql/Dockerfile
command
cat << ETX > mysql/my.cnf
[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8
ETX
cat mysql/my.cnf

world.sqlのインポート (サンプルデータであり何でも良い)

以下よりダウンロードしmysql/dbの中に保存する。

command
wget https://downloads.mysql.com/docs/world-db.tar.gz
tar xvzf world-db.tar.gz
mv world-db/world.sql mysql/db
ls -l mysql/db
--2022-08-08 22:55:03--  https://downloads.mysql.com/docs/world-db.tar.gz
downloads.mysql.com (downloads.mysql.com) をDNSに問いあわせています... 2600:140b:a800:ab3::2e31, 2600:140b:a800:a94::2e31, 23.206.10.112
downloads.mysql.com (downloads.mysql.com)|2600:140b:a800:ab3::2e31|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 92915 (91K) [application/x-gzip]
`world-db.tar.gz' に保存中

world-db.tar.gz     100%[===================>]  90.74K  --.-KB/s 時間 0.07s      

2022-08-08 22:55:04 (1.20 MB/s) - `world-db.tar.gz' へ保存完了 [92915/92915]

x world-db/
x world-db/world.sql
total 784
-rw-r--r--  1 daisuke  staff  398635  8  1 07:05 world.sql
command
rm -rf world-db*

mysqlのbuild

command
docker-compose build
Building mysql
[1A[1B[0G[?25l[+] Building 0.0s (0/1)                                                         
[?25h[1A[0G[?25l[+] Building 0.1s (7/7) FINISHED                                                
[34m => [internal] load build definition from Dockerfile                       0.0s
[0m[34m => => transferring dockerfile: 271B                                       0.0s
[0m[34m => [internal] load .dockerignore                                          0.0s
[0m[34m => => transferring context: 2B                                            0.0s
[0m[34m => [internal] load metadata for docker.io/library/mysql:latest            0.0s
[0m[34m => [internal] load build context                                          0.0s
[0m[34m => => transferring context: 141B                                          0.0s
[0m[34m => [1/2] FROM docker.io/library/mysql                                     0.0s
[0m[34m => CACHED [2/2] ADD ./my.cnf /etc/mysql/conf.d/my.cnf                     0.0s
[0m[34m => exporting to image                                                     0.0s
[0m[34m => => exporting layers                                                    0.0s
[0m[34m => => writing image sha256:7ecdd05dff28b447c9586d1dcf7cacd652b94a015ae51  0.0s
[0m[34m => => naming to docker.io/library/docker_mysql_mysql                      0.0s
[0m[?25h

コンテナーの起動 (-d でバックグラウンド実行)

command
docker-compose up -d
Creating network "docker_mysql_default" with the default driver
Creating docker_mysql_mysql_1 ... 
[1Bting docker_mysql_mysql_1 ... [32mdone[0m
command
docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED        STATUS                  PORTS                                           NAMES
7ce334b9568d   docker_mysql_mysql   "docker-entrypoint.s…"   1 second ago   Up Less than a second   13306/tcp, 33060/tcp, 0.0.0.0:13306->3306/tcp   docker_mysql_mysql_1

MySQL環境へのログイン

CONTAINER_IDの取得

command
CONTAINER_ID=$(docker ps | grep docker_mysql_mysql | awk '{print $1}') && echo $CONTAINER_ID
7ce334b9568d

CONTAINERに直接ログインするとき

command
docker exec -it ${CONTAINER_ID} bash
container
mysql -u root -p mysql

以降は好きにテスト

HOSTからアクセスするとき

command
mysql -u root -p -h localhost -P 13306 --protocol=tcp

以降は好きにテスト

お片付け

command
docker-compose down
Stopping docker_mysql_mysql_1 ... 
[1BRemoving docker_mysql_mysql_1 ... mdone[0m
[1BRemoving network docker_mysql_defaultne[0m
command
docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

参考

0
0
0

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
0
0