はじめに
Webアプリケーション開発の初学者です。
Dockerのメリットは、気軽に環境をぽこぽことつくっては捨てられるところですので、
私のような初心者にもうってつけではないかと思いました。
DockerDesktopをWindowsへインストールする方法
WSL2でDockerDesktopをはじめる方法は、こちらが簡潔でわかりやすく参考にさせていただきました。
->参考:DockerDesktopをWindowsへインストールする手順を解説(WSL2)
ターミナルは、Windows Terminal を使用しています。
また、以下の操作はWSL2上の Ubuntu と VScode を使用しています。
作業用ディレクトリの作成
任意の階層に作業用ディレクトリを作成します。
mkdir mysql-practice
必要なファイルの準備
docker-compose.yml
ファイルと.env
ファイルを作成します。
touch Dockerfile docker-compose.yml .env
.envの作成
MYSQL_ROOT_PASSWORD=mysql_password
MYSQL_USER=mysql_user
MYSQL_PASSWORD=mysql_user_password
.envファイルにはパスワードなどの機密情報を記述しているため取り扱いに注意します。
特に、このファイルを公開リポジトリにコミットしないよう注意が必要です。そのためには、 .gitignore ファイルに .env を含めて、Gitの追跡対象から外すことが推奨されます。
docker-compose.ymlの作成
services:
db:
container_name: db
image: mysql:8.0.33-debian
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306
volumes:
- mysql-store:/var/lib/mysql
- ./mysql:/data
working_dir: /data
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
mysql-store:
- services:
この配下にある各サービスは、コンテナとして立ち上がります。
ここには複数のサービス(コンテナ)が記述できます。今回の例では、dbという名前のサービスが定義されています。 - db:
サービスの名前を設定。 - image: mysql:8.0.33-debian
使用するDockerイメージを指定します。DockerHubのMySQLのページからTagsへアクセスし、イメージ名を確認できます。
尚、別途Dockerfileファイルを用意している場合は異なる記述となります。 - command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
コンテナ起動時に実行するコマンドを指定します。上記コマンドは、MySQLサーバーのデフォルトの文字セットと照合順序を設定するために実行されています。 - ports:
- 3306:3306
ホストマシンのポート3306をコンテナのポート3306に接続するための記述
- 3306:3306
- volumes:
- mysql-store:/var/lib/mysql
- ./mysql:/data
ホストとコンテナ間でのボリューム(ディスクの一部)の共有を指定します。(データの永続化)
./mysql:/data
は、カレントディレクトリのmysqlフォルダをdocker環境上の/dataフォルダにマウント(同期)することにより、任意のファイル(SQLスクリプト等 )をdocker環境で使用するためにマウントしている例です。いずれも任意のフォルダを指定可能です。
/var/lib/mysql ディレクトリはMySQLのデータベースファイルが格納されるデフォルトのディレクトリです。そのため、通常はこのディレクトリを直接操作することは避けるべきです。
データベースの持続性を保つため、またはデータベースのバックアップやリストアを行うために、このディレクトリをホストマシンのディレクトリとマウントすることは一般的な手法です。その際、MySQLサーバーが動作していない状態でのみ、このディレクトリ内のファイルを操作します。
-
working_dir: /data
コンテナ内でコマンドが実行されるデフォルトのディレクトリを指定しています。
必須の設定ではなく、設定しない場合は/
ルートディレクトリがデフォルトです。 -
environment:
.env
で定義したrootパスワード、user名・パスワードを参照して定義 -
volumes:
- mysql-store:
ここでは、mysql-storeという名前のDockerボリュームが定義されています。このボリュームは、Dockerが管理している特定のディレクトリ内に存在します。
このボリュームは上記のservices -> db -> volumesで使用されています。
- mysql-store:
コンテナの構築・起動
docker compose up -d
コンテナに入る
docker compose exec db bash
構築した環境を確認
MySQLにログインします。
mysql -u <rootあるいはユーザ名> -p
さいごに
ここまでご覧いただきまして、ありがとうございました。