コミュニティソリューション

永続的なDockerストレージを使用してCasaOSにMySQLをインストールする

A 2023 CasaOS tutorial introduced MySQL installation; current Docker Official Image guidance now defines versions, persistence, and initialization variables.

Docker 公式イメージ、永続化した /var/lib/mysql ボリューム、明示的なバージョンタグを使用して、CasaOS に MySQL をインストールします。重要なデータベースで、古い 2023 年のスクリーンショットや浮動する latest タグに頼らないでください。

2026年9月現在、公式 Docker イメージでは MySQL 8.4 LTS に加えて、より新しい 9.x/イノベーション系の系列も公開されています。長期運用するセルフホストサービスでは、アプリケーションが新しいメジャーバージョンを明示的にサポートしていない限り、8.4 を互換性の基準として選ぶのが妥当です。

公式 MySQL イメージを使用する

現在のMySQL Docker 公式イメージは、Docker コミュニティと MySQL チームによって保守されています。

バージョンタグを意図的に選択する

次のような固定したメジャー/LTS タグを使用します:

mysql:8.4

無条件に従うのではなく latestこれにより、互換性の変更を伴う新しいメジャーリリースへ移行できます。

永続的な CasaOS 設定

  • イメージ: mysql:8.4
  • コンテナポート: 3306
  • 永続ボリューム: ホストの AppData パス → /var/lib/mysql
  • MYSQL_ROOT_PASSWORD: 強力な初期 root パスワード
  • 任意: MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD

ポート 3306 をインターネットに公開しない

同じホスト上の別の Docker アプリが MySQL を必要とする場合は、両方のサービスを共有 Docker ネットワークに配置し、サービス名を使用します。3306 番ポートを公開する必要がないことも多いです。

root の代わりにアプリケーションユーザーを作成する

次を使用します MYSQL_DATABASE, MYSQL_USER、および MYSQL_PASSWORD 初回の初期化時に、アプリケーション専用のデータベースとアカウントを作成します。

root は管理と復旧用に残しておきます。

初回実行時の環境変数を理解する

公式イメージは、データディレクトリが空の場合にのみデータベースを初期化します。後からブートストラップ用環境変数を変更しても、既存のアカウントやデータベースは自動的に書き換えられません。

論理ダンプでバックアップする

移植性の高いバックアップには、次を使用します mysqldump または、MySQL が書き込み中にアクティブなデータベースファイルをコピーするのではなく、公式イメージに記載されたダンプ/リストアの方法を使用します。

サービス名で phpMyAdmin または別のアプリに接続する

共有 Docker ネットワーク上では、ウェブアプリは次のようなサービス名/コンテナホスト名を使って MySQL に接続できます mysql。別のコンテナ内では、 localhost そのコンテナ自体を指します。

Dockerネットワーキングガイドでは、そのコンテナネットワークモデルについて説明しています。

他のアプリを接続する前にMySQLの状態を確認する

初回起動後、すぐに本番アプリケーションをデータベースへ接続しないでください。コンテナログを確認し、MySQLの初期化が完了していて、再起動ループに陥っていないことを確認してください。

docker logs mysql
docker exec -it mysql mysqladmin -uroot -p ping

正常なサーバーは、初期データベース設定の完了後に応答するはずです。初回起動では、イメージがシステムテーブル、ユーザー、指定されたデータベースを作成するため、時間がかかる場合があります。

データをインポートする前に文字セットとタイムゾーンを計画する

アプリケーションには、特定の照合順序、文字セット、タイムゾーンに関する要件がある場合があります。既存のデータベースを移行する場合は、インポート前に旧サーバーのMySQLメジャーバージョンと設定を比較してください。

アプリケーションがMySQL 8.0でテストされていたからといって、コンテナが起動するだけでMySQL 9.xを自動的にサポートすると考えないでください。アプリケーションのベンダーが必要としているメジャーバージョンを固定してください。

データベース用ストレージを一般共有フォルダーから分離する

MySQLのデータファイルは、権限が一貫しており、遅延の低い、信頼できるローカルストレージに置いてください。配置しないでください /var/lib/mysql 容量が大きいというだけで、信頼性の低いSMBマウントやリムーバブルドライブに保存しないでください。

CasaOSホストにSSDと大容量HDDプールがある場合、SSDをデータベースの保存先にする方が適していることが多く、スケジュールされたダンプを大容量のバックアップストレージにコピーできます。

よくある質問

mysql:latestを使うべきですか?

本番に近いセルフホスティングでは、意図的にメジャー版またはLTSタグを指定してください。そうすれば、通常のpullでメジャーバージョンが予期せず上がることを防げます。

MySQLのデータはどこに永続化すべきですか?

ホストのAppDataフォルダーを次にマッピングします /var/lib/mysql.

ポート3306を公開する必要がありますか?

同じDockerネットワーク上の他のコンテナだけがデータベースを必要とする場合は、不要です。

コンテナ変数を編集すれば、後からMYSQL_ROOT_PASSWORDを変更できますか?

初期化後は、確実に変更できるとは限りません。既存のデータベースアカウントはMySQL自体から管理してください。