4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerを使ってMySQLの環境構築【WSL2】

Last updated at Posted at 2023-05-22

はじめに

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に接続するための記述
  • 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で使用されています。

コンテナの構築・起動

docker compose up -d

コンテナに入る

docker compose exec db bash

構築した環境を確認

MySQLにログインします。

mysql -u <rootあるいはユーザ名> -p

さいごに

ここまでご覧いただきまして、ありがとうございました。

参考

Docker超入門講座

マンガでわかるDocker

Docker-docs

DockerDesktopをWindowsへインストールする手順を解説(WSL2)

Dockerを使ってMySQLの環境を構築してみました

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?