InfraAcademy

InfraAcademy Blog

【初心者向け】Dockerを使ってphpmyadminとmysqlを簡単に構築する方法

| #Docker #php #mysql
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Dockerを使ってphpmyadminとmysqlを簡単に構築する方法を解説します。Dockerでsqlサーバーを構築するとき、phpmyadminを構築すると、DBの管理が簡単になるのでオススメです。

結論から言うと、docker-compose.ymlを1つ作成してdocker compose up -dを実行するだけで、mysqlとphpmyadminの環境は完成します。コピペで動く設定ファイルを用意したので、ぜひ手を動かしながら読み進めてみてください。

設定内容の意味やデータの永続化、うまく動かないときの対処法まで順番に解説します。では、早速解説します!

Dockerを使ってphpmyadminとmysqlを簡単に構築する方法

DBとphpmyadminの構築方法が分からない、と悩んでいませんか。実は、Dockerを使えば、たった1つのファイルを書くだけで簡単に環境を構築することができます!

そもそもphpmyadminとは、ブラウザからmysqlを操作できるデータベース管理ツールのことです。SQL文を覚えていなくても、画面の操作だけでデータベースやテーブルを作成・編集できます。

mysqlをコマンドだけで操作するのは、初心者の方にはハードルが高いですよね。phpmyadminをセットで立ち上げておくと、DBの中身が目で見えるようになるので、学習も開発もぐっと楽になります。

Dockerの使い方が良く分からないという方は、先にDockerとは何かを初心者向けに解説した記事をご覧ください。また、Docker自体をまだ入れていない方は、Dockerの環境をセットアップする手順から進めましょう。

構築の全体像を確認しよう

今回作る環境は、mysqlのコンテナとphpmyadminのコンテナの2つで構成されます。この2つを、docker composeという仕組みでまとめて起動します。

docker composeとは、複数のコンテナの設定を1つのファイルに書いておき、コマンド1回で一括起動できるツールです。コンテナを1つずつdocker runで立ち上げるよりも、はるかに管理が楽になります。

phpmyadminのコンテナは、同じネットワーク内にあるmysqlコンテナへ接続されます。私たちはブラウザからphpmyadminにアクセスして、mysqlの中身を操作するというイメージですね。

docker-compose.ymlファイルの作成

では、早速mysqlとphpmyadminの環境を構築します。まず、docker-compose.ymlファイルを作成します。

作業用のフォルダを1つ作り、その中へ下記の内容で保存してください。

services:
  mysql:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: sample_db
      MYSQL_USER: dev_user
      MYSQL_PASSWORD: dev_password
    volumes:
      - db-data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: mysql
      PMA_USER: root
      PMA_PASSWORD: password
    depends_on:
      - mysql
    ports:
      - "8080:80"

volumes:
  db-data:

これで完成です。mysqlとphpmyadminという2つのサービスを、1つのファイルにまとめて定義しています。

記事の後半でdocker-compose.ymlの中身の解説を行います。まずは起動確認をします。

Dockerコンテナを立ち上げる

次にDockerコンテナを立ち上げましょう。docker-compose.ymlを置いたフォルダで、下記のコマンドを実行します。

docker compose up -d

古い環境を使っている場合は、ハイフン付きのdocker-compose up -dを実行してください。Linuxでコマンドが見つからないときは、docker-composeをLinuxにインストールする方法が参考になります。

コマンドを入力すると、イメージをプルしてコンテナを立ち上げます。

phpmyadminの起動

1分くらいするとコマンドが完了します。

phpmyadminの起動完了

末尾に-dを付けているのは、コンテナをバックグラウンドで動かすためです。付け忘れるとターミナルが占有されてしまうので、注意しましょう。

phpmyadminの画面にアクセスする

最後にhttp://localhost:8080/にアクセスすると、下記の画面のようにphpmyadminの画面が表示されます。

phpmyadminの確認

mysqlに接続されていることも分かります。

Dockerを使用するとこのように簡単にDBの環境を作成することができます。ぜひオススメです。

画面が表示されたら、データベースの作成やテーブルの編集、SQLの実行までブラウザ上で完結します。CSVやSQLファイルのインポート・エクスポートもできるので、ひととおり触ってみてください。

mysql側のdocker-compose.yml設定解説

ここからは、先ほど作成したdocker-compose.ymlの中身を解説します。まずはmysqlサービス側の設定からです。

それぞれの意味が分かると、自分のプロジェクトに合わせたカスタマイズもできるようになります。上から順番に見ていきましょう。

imageはバージョンのタグまで指定する

imageの行では、使用するDockerイメージを指定しています。ポイントは、mysql:8.4のようにコロンの後ろへバージョンのタグまで指定することです。

タグを省略すると常に最新版が使われるため、ある日突然バージョンが上がって動かなくなることがあります。開発環境ではバージョンを固定しておくのが安心です。

ちなみに、mysqlの8.0系は2026年4月にサポートが終了しました。これから環境を作るなら、長期サポート版である8.4系を選んでおくと良いでしょう。

environmentでmysqlの初期設定を渡す

environmentには、コンテナの初回起動時に適用したい設定を環境変数として渡します。主な環境変数の意味は下記の表の通りです。

環境変数 意味
MYSQL_ROOT_PASSWORD rootユーザーのパスワード(必須)
MYSQL_DATABASE 初回起動時に自動作成されるデータベース名
MYSQL_USER 初回起動時に自動作成される一般ユーザー名
MYSQL_PASSWORD 一般ユーザーのパスワード

MYSQL_USERで作られたユーザーには、MYSQL_DATABASEで指定したデータベースへの権限が自動で付与されます。アプリケーションから接続するときは、rootではなくこの一般ユーザーを使うのがオススメです。

注意点として、これらの環境変数が効くのは初回起動時だけです。あとから値を書き換えてもパスワードは変わらないので、覚えておいてください。

volumesでデータを永続化する

volumesは、データを永続化するための設定です。コンテナは削除すると中のデータも一緒に消えてしまうからです。

db-data:/var/lib/mysqlと書くことで、mysqlのデータ保存先をdb-dataという名前付きボリュームへ逃がしています。これにより、コンテナを作り直してもデータベースの中身は残ります。

なお、./mysql:/var/lib/mysqlのように書くと、作業フォルダへ直接保存するバインドマウント方式になります。データの実体をフォルダで直接確認したい方は、こちらの書き方でも構いません。

phpmyadminのdocker-compose.yml設定解説

続いて、phpmyadmin側の設定を解説します。phpmyadmin特有の部分はenvironmentの部分なので、ここを中心に見ていきます。

なお、イメージにはDocker公式イメージのphpmyadminを指定しています。古い記事で見かけるphpmyadmin/phpmyadminは移行前の旧リポジトリ名なので、これから書くなら短い公式イメージ名を使いましょう。

phpmyadminのenvironmentの設定

phpmyadminのenvironmentの設定でsqlサーバーへの接続情報を設定します。設定は下記のようなものがあります。

環境変数 意味
PMA_ARBITRARY 1に設定すると、任意のサーバーへの接続が許可される
PMA_HOST SQLサーバーのホスト名かIPアドレスを指定
PMA_PORT SQLサーバーのポートの設定
PMA_USER SQLサーバーに接続するユーザー名
PMA_PASSWORD SQLサーバーに接続するユーザーのパスワード

PMA_HOSTにmysqlと書くだけで接続できるのは、docker composeが同じネットワーク内のサービス名を自動で名前解決してくれるからです。IPアドレスを調べて書く必要はありません。

また、PMA_USERとPMA_PASSWORDを設定しておくと、ログイン画面を省略して自動でログインできます。毎回パスワードを入力する手間が省けるので、ローカルの開発環境では便利ですね。

その他の設定はこちらを参考にしてください。

phpmyadmin/phpmyadmin – Docker Hub

PMA_ARBITRARYを使うときの注意点

PMA_ARBITRARYを1にすると、ログイン画面に接続先サーバーの入力欄が追加されます。複数のDBサーバーを切り替えながら管理したいときに便利な設定です。

ただし、任意のサーバーへ接続できるということは、外部へ公開した場合に攻撃の入り口として悪用される恐れもあるということです。接続先がPMA_HOSTの1台だけで良いなら、この行は削除しておくのが安全ですね。

depends_onでコンテナの起動順を制御する

depends_onは、mysqlコンテナを起動してからphpmyadminコンテナを起動するという、順序の指定です。接続先のDBが無い状態でphpmyadminだけが立ち上がるのを防ぎます。

昔の記事ではlinksという設定がよく使われていましたが、現在ではレガシーな書き方です。サービス名で自動的に通信できるため、起動順の制御はdepends_onへ置き換えましょう。

注意点として、depends_onが保証するのはあくまで起動の順番だけです。mysqlの初期化完了までは待ってくれないので、起動直後に接続エラーが出たら少し待ってから再読み込みしてみてください。

portsでブラウザからアクセスできるようにする

portsの8080:80は、PCの8080番ポートをコンテナ内の80番ポートへつなぐ設定です。この設定のおかげで、ブラウザからhttp://localhost:8080/でphpmyadminを開けます。

8080番を他のアプリが使っている場合は、8081:80のように左側の数字だけを変更しましょう。右側の80はコンテナ内部のポート番号なので、変更は不要です。

古いdocker-compose.ymlが動かないときの変更点

ネットで見つけた記事をコピペしたら、警告やエラーが出たという経験はありませんか。docker composeの書き方は少しずつ更新されているため、古い記法のままだと警告が出ることがあります。

代表的な変更点を表にまとめました。

項目 古い書き方 現在の書き方
バージョン指定 version: '2' などを記載 記載不要(書くと警告が出る)
コンテナ間の接続 links: で指定 サービス名で自動解決される
phpmyadminのイメージ phpmyadmin/phpmyadmin phpmyadmin
起動コマンド docker-compose up -d docker compose up -d

versionキーは現在のdocker composeでは使われなくなり、書いてあると無視される旨の警告が表示されます。エラーにはなりませんが、消してしまって問題ありません。

起動コマンドも、ハイフン付きのdocker-composeからスペース区切りのdocker composeへ移行しています。新しいDocker Desktopを入れていれば、スペース区切りのコマンドがそのまま使えますよ。

コンテナの停止とデータの初期化方法

環境の作り方だけでなく、片付け方もあわせて覚えておきましょう。使い終わったコンテナは、下記のコマンドで停止・削除できます。

docker compose down

このコマンドで削除されるのはコンテナとネットワークだけで、名前付きボリュームは残ります。そのため、もう一度docker compose up -dを実行すれば、データベースの中身は元通りに復活します。

一方で、downコマンドに-vを付けるとボリュームごと削除され、データベースの中身も完全に消えてしまいます。大事なデータが入っているときは、-vを付けないよう注意してください。

逆に、パスワードなどの初期設定をやり直したいときは、docker compose down -vで一度初期化してから起動し直すのが確実です。この使い分けを知っておくと、トラブル対応がぐっと楽になりますよ。

一歩進んだdocker-compose.ymlの使い方

基本の構築ができたら、もう一歩踏み込んだ使い方にも挑戦してみましょう。実際の開発現場に近い構成へ、少しずつ近づけていきます。

パスワードを.envファイルへ分離する

今回はdocker-compose.ymlへパスワードを直接書きましたが、これはローカル学習用の書き方です。このままGitHubなどへ公開すると、パスワードが丸見えになってしまいますよね。

チームで開発するときは、パスワード類を.envファイルへ分離して、docker-compose.ymlからは変数として参照します。.envをGitの管理対象から外しておけば、パスワードをリポジトリへ含めずに済みます。

初期データを自動で投入する

mysqlの公式イメージには、初回起動時にSQLファイルを自動実行してくれる仕組みがあります。コンテナ内の/docker-entrypoint-initdb.dというフォルダへ、SQLファイルをマウントしておくだけです。

テーブル作成やテストデータ投入のSQLを置いておけば、環境を作り直すたびに同じ状態から始められます。チーム全員が同じDB環境をすぐ再現できるのは、Dockerならではの便利さですね。

コマンドラインからmysqlへ接続する

phpmyadminだけでなく、コマンドラインからmysqlを操作したい場面もありますよね。その場合は、下記のコマンドでコンテナ内のmysqlクライアントへ接続できます。

docker compose exec mysql mysql -u root -p

パスワードを入力すれば、見慣れたmysqlのプロンプトが表示されます。SQLコマンドの練習をしたい方は、こちらの方法も覚えておくと便利です。

phpmyadminとmysqlの構築でよくある疑問

最後に、mysqlとphpmyadminの構築でつまずきやすいポイントへQ&A形式で答えます。エラーが出たときは、ここから原因を探してみてください。

localhost:8080へアクセスできないときは?

まず、docker compose psコマンドでコンテナが起動しているかを確認しましょう。phpmyadminのコンテナが表示されない場合は、起動そのものに失敗しています。

port is already allocatedというエラーが出るときは、8080番ポートを別のアプリが使用中です。portsの設定を8081:80などへ変更して、起動し直してみてください。

phpmyadminは開くのにmysqlへ接続できないときは?

起動した直後は、mysql側の初期化がまだ終わっていない可能性があります。1〜2分ほど待ってから、ブラウザを再読み込みしてみましょう。

それでも解決しない場合は、PMA_HOSTの値がmysqlのサービス名と一致しているかを確認してください。また、古いボリュームが残っていて以前のパスワードのまま起動しているケースでは、down -vによる初期化で解決することもあります。

本番環境でもphpmyadminを使っていい?

phpmyadminは、基本的にローカルの開発環境向けのツールと考えるのが安全です。本番サーバーで公開すると、データベースへの入り口をインターネット全体へ晒すことになるからです。

どうしても本番で使いたい場合は、IP制限や追加の認証を必ずかけてください。学習用のローカル環境であれば、今回の構成のままで問題ありません。

Dockerを使ってphpmyadminとmysqlを簡単に構築する方法まとめ

今回の記事では、Dockerを使用してmysqlとphpmyadminの環境を構築する方法を解説しました。簡単に環境構築できたと思います!

docker-compose.ymlを1つ用意すれば、DB環境はdocker compose up -dの一発で完成します。environmentやvolumesの意味も分かったので、自分のプロジェクトに合わせた調整もできるはずです。

環境ができたら、次はアプリケーションと組み合わせてみましょう。Dockerでphpの環境を構築する方法と組み合わせれば、Web開発の定番構成を再現できます。

イメージのカスタマイズに興味が出てきた方は、Dockerfileの書き方を解説した記事へ進むのがオススメです。独学用の教材を探している方は、Dockerを学習できるサイトの紹介記事も参考にしてください。

Dockerの使い方をさらに知りたいという方はこちらの講座と参考書がオススメです。

Udemyの講座はこちら

ゼロからはじめる Dockerによるアプリケーション実行環境構築

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る