Docker ComposeでMySQLを使う方法|コード例付き

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年11月)

✔以下のような方に向けて書かれています

「docker composeでMySQLってどう使うの?」

「docker composeにおけるMySQLのセットアップ方法を知りたい」

「docker composeの具体的な使い方を見て学びたい」

✔当記事で紹介すること

  • docker composeとMySQLの基本的な機能
  • docker composeでMySQLをインストール及び設定する方法
  • docker composeでMySQLを使用する具体的な使用例

当記事では、docker composeでMySQLを扱う基礎から始め、その設定方法や応用のテクニック、さまざまな具体例まで詳細に説明しています。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

はじめに:DockerとMySQLの基本

こちらでは、「Docker」と「MySQL」の基本概念について説明していきます。

これらのツールの基本的な知識を持つことで、現代のアプリケーション開発環境の構築やデータベース操作がスムーズに行えるでしょう。

  • Dockerとは?
  • MySQLとは?

Dockerとは?

Dockerは、アプリケーションとその依存関係をコンテナという単位でパッケージ化し、一貫した環境での実行を可能にするプラットフォームです。

これにより、「ローカル環境では動作したのに本番環境で動かない」という問題を避けられます。

MySQLとは?

MySQLは、オープンソースの関係型データベース管理システム(RDBMS)のひとつです。

高いパフォーマンスと信頼性を持ち、世界中で多くのWebアプリケーションやシステムに利用されています。

必要なツール:DockerとDocker Composeの導入

DockerとMySQLを組み合わせて動作させるためには、DockerとDocker Composeの導入が必要です。

これらのツールのインストール方法を次に説明します。

  • Dockerのインストール方法
  • Docker Composeのインストール方法

Dockerのインストール方法

各OSにおけるインストール方法は以下の記事でご覧ください。

例えばDebian系のLinuxでインストールするには以下のコマンドです。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Docker Composeのインストール方法

Docker Composeは、複数のコンテナを定義・管理するツールです。

以下のコマンドでインストールできます。

sudo apt-get install docker-compose-plugin

プロジェクトの準備:docker-compose.ymlの作成

Docker Composeの構成を定義するdocker-compose.ymlファイルを作成します。

このファイルには、MySQLコンテナの設定などが記述されます。

version: '3.1'  # docker-composeのバージョン

services:
  db:  # サービス名(任意に変更可能)
    image: mysql:5.7  # 使用するMySQLのイメージとバージョン
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example  # rootユーザのパスワード
      MYSQL_DATABASE: exampledb  # 作成するデータベース名
      MYSQL_USER: exampleuser  # 作成するユーザ名
      MYSQL_PASSWORD: examplepass  # 上記ユーザのパスワード
    ports:
      - "3306:3306"  # ホストとコンテナのポートマッピング
    volumes:
      - my-db:/var/lib/mysql  # データの永続化のためのボリューム

volumes:
  my-db:  # ボリュームの定義

MySQL環境の構築手順

DockerとDocker Composeを使用してMySQLの環境を構築する手順を詳しく解説します。

  • Docker Composeを使ったMySQLの起動
  • 初期設定スクリプトの作成

Docker Composeを使ったMySQLの起動

docker-compose.ymlにMySQLの設定を記述した後、以下のコマンドでMySQLを起動します。

docker-compose up -d

初期設定スクリプトの作成

MySQLの初期設定をおこなうスクリプトを作成します。

これにより、テーブルの作成やユーザーの追加などの操作が自動化されます。

init.sqlの例

-- データベースの作成
CREATE DATABASE IF NOT EXISTS exampledb;

-- 使用するデータベースを選択
USE exampledb;

-- テーブルの作成
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

-- ユーザーの作成と権限の付与
CREATE USER 'exampleuser'@'%' IDENTIFIED BY 'examplepass';
GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'%';
FLUSH PRIVILEGES;

docker-compose.ymlでinit.sqlを実行するよう指定

version: '3.1'

services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
    ports:
      - "3306:3306"
    volumes:
      - my-db:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

volumes:
  my-db:

MySQLの操作方法

Dockerで起動したMySQLへの接続や操作方法を解説します。

  • MySQLクライアントによる接続と操作
  • SQLの作成:サンプルテーブルと設定ファイル

MySQLクライアントによる接続と操作

MySQLコンテナ内部に入り、MySQLクライアントを使用してデータベースを操作する方法を解説します。

docker exec -it [MySQLコンテナのID or NAME] mysql -u root -p

このコマンドでMySQLクライアントに接続します。

パスワードを聞かれたら、設定したパスワードを入力してください。

SQLの作成:サンプルテーブルと設定ファイル

MySQLにデータベースやテーブルを作成する際の基本的なSQLを示します。

CREATE DATABASE sampledb;
USE sampledb;
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255)
);

上記のSQLは、sampledbというデータベースと、その中にusersというテーブルを作成します。

確認と実行

DockerでMySQL環境を起動した後の確認手順と実行方法を説明します。

  • Dockerの起動と起動確認
  • DBの初期化と確認

Dockerの起動と起動確認

Dockerコンテナの起動状態を確認するには、以下のコマンドを使用します。

docker ps

このコマンドで、現在稼働中のDockerコンテナの一覧が表示されます。

DBの初期化と確認

先ほど作成した初期設定スクリプトを使用してデータベースを初期化します。

その後、正しくテーブルが作成されているかを確認します。

SHOW TABLES;

よくある問題と解決策

DockerとMySQLの組み合わせでよく遭遇する問題と、それらの問題を解決するための方法を解説します。

例として、ポートの競合やコンテナのネットワーク設定などのトピックを取り扱います。

ポートの競合

DockerコンテナでMySQLを実行する際、ホストマシンのポートが既に別のプロセスによって使用されている場合、ポートの競合が発生します。

これは、MySQLがデフォルトで3306ポートを使用するため、特に一般的な問題です。

解決策として、ポート番号の変更がおすすめ。

docker-compose.ymlファイルで、MySQLコンテナのポートマッピングを変更します。

例えば、3306の代わりに3336を使用できます。

ports:
  - "3336:3306"

使用中のポートの確認として、ホストマシンでnetstatコマンド(Windowsの場合はnetstat -an | find "3306"、Linuxの場合はnetstat -tulnp | grep 3306)を使用して、どのプロセスがポートを使用しているかを確認し、必要に応じてそのプロセスを終了します。

コンテナのネットワーク設定

Dockerコンテナが適切なネットワーク設定を持たない場合、外部からMySQLサービスにアクセスできない、または他のコンテナと通信できないという問題が生じます。

ネットワークモードの調整がひとつの解決策です。

コンテナをDockerのデフォルトネットワークから別のネットワークに接続することで、他のサービスとの連携を改善できます。

例えば、docker-compose.ymlにおいて、コンテナにカスタムネットワークを割り当てましょう。

  services:
    db:
      # ...他の設定...
      networks:
        - mynetwork

  networks:
    mynetwork:
      driver: bridge

特定のコンテナがMySQLデータベースにアクセスする必要がある場合は、linksオプションを使用して、それらのコンテナ間の直接的な接続を確立できます。

データの永続化

Dockerコンテナは一時的なものであり、コンテナを削除するとその中のデータも失われます。

これは、データベースにとって特に大きな問題です。

ボリュームの使用として、Dockerボリュームを使用してデータの永続化を確保します。

docker-compose.ymlでボリュームを定義し、MySQLのデータディレクトリにマウントします。

volumes:
  - my-db:/var/lib/mysql

ローカルのボリュームの代わりに、外部のデータストレージ(例えば、クラウドベースのストレージサービス)を使用することも選択肢です。

これらの問題と解決策は、Dockerを使用する際の一般的なトピックをカバーしており、MySQLに限らず多くのデータベースや他のサービスにも適用可能です。

まとめ

当記事では、DockerとMySQLの基本的な操作と組み合わせについて学習してきました。

dockerは立ち上げても簡単にやり直せるとても便利なツール。

当記事の内容をぜひ試しながら、使い方を身につけていきましょう。

タイトルとURLをコピーしました