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