はじめに
Dockerを使用した、SQLの環境構築方法になります。
MacでもWindowsでも動作確認は取れているので、共通して使えるような
内容になっています。
(暫定記事なので、内容についてはアップデートできたらと…)
また、ただSQL環境構築をしても面白くないので、
PythonのFlaskと連動させ、todoリストを使用できるまでを想定しています。
〜前提〜
以下の2つがあれば基本的に大丈夫だと思います。
- Docker for Desktopをインストール済み
- Linux環境が整っている(Windowsの場合)
ファイルの階層
├── db-env/
├── docker-compose.yml ← MySQL用 │
└── mysql/
└── Dockerfile
└── init.sql ← 初期DB作成スクリプト(任意)
├── todo/
├── app.py
├── docker-compose.yml ← Flask用
├── Dockerfile
├── requirements.txt
├── .env
└── static/
└── templates/
以下URLからダウンロードどうぞ。
https://github.com/chinmaru134/todo_Qiita/tree/main
1. 共通ネットワークの作成
イメージとしては、アプリとDBを繋ぐ「LANケーブル」を先に準備する形です。
docker network create common-net
「common-net」の部分に関しては任意の名称で大丈夫です。
作成した後に、以下のコマンドでネットワーク名が出てくればOKです。
docker network ls
2.docker-compose.ymlで環境構築
「docker-compose.yml」とは何ぞや…?と思うかもしれませんが、
ここでは詳細を省きます。「設計図」というイメージを持っていただければ大丈夫です。
まずはSQL側から行います。
- SQLのYAMLファイルがある「dv-env」に移動、その後、SQL環境を作る
-- ディレクトリの移動
cd dv-env
-- 設計図(ymlをdockerのコマンドで)を起動させる
docker compose up -d
- Flask側も同様に起動
-- ディレクトリの移動
cd todo
-- 設計図(ymlをdockerのコマンドで)を起動させる
docker compose up -d
- 作成したコンテナが起動しているか確認
-- 確認のコマンド
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxx todo-flask "python app.py" 2 days ago Up 2 days 0.0.0.0:5002->5002/tcp, [::]:5002->5002/tcp todo-flask-1
xxxxxxxxxx mysql:8.0 "docker-entrypoint.s…" 2 months ago Up 4 weeks 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp mysql
PORTS
の列に番号が出ていれば起動できています。
3.SQLにログインし、テーブルを追加
今回はtodoリストを作成するため、
あらかじめデータベースにテーブルを用意します。
- SQLにログイン
docker exec -it 「SQLのコンテナID」 mysql -uroot -p
その後、ymlファイルに書いたSQLのパスワードの入力が求められます。
mysql>
と表示されたらログインできています。
- DBの確認
-- DBの確認
SHOW DATABASES;
-- 「flask-db」と出ていることを確認
-- 使用するDBを選択
USE flask_db
-- テーブルの作成
-- todoリスト
CREATE TABLE todo_list (
todo_id INT AUTO_INCREMENT PRIMARY KEY,
title varchar(500) NOT NULL,
insert_time timestamp NOT NULL default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
最後に、http://127.0.0.1:5002
をWebブラウザに入力すればtodoリストのページが出てきます。
終わりに
内容についてかなり端折って書いたので、時間がある時に記事は手直ししていきます。。。