CI/CD ·

MacでDockerを動かす方法:MシリーズチップでDocker Desktopをインストールし、MySQL・Redis・Webプロジェクトをデプロイする実践

MacでDockerを動かす方法:MシリーズチップでDocker Desktopをインストールし、MySQL・Redis・Webプロジェクトをデプロイする実践

MシリーズチップのMacでDockerを使う開発者向けに、Docker Desktopの導入と動作確認からComposeでのMySQL・Redis・Webプロジェクト構築までを説明します。イメージのアーキテクチャ、ポート、接続先、データ永続化の確認手順を追い、ローカル環境で問題が起きた場合の切り分け方法もまとめます。

症状:Docker Desktopを入れたのに、コンテナが起動しない、またはWebアプリからデータベースへ接続できない。

判定:適しています。 MシリーズチップのMacでは、Apple Silicon対応のDocker Desktopを使い、イメージのアーキテクチャとComposeの設定を確認すれば、DockerとDocker ComposeでMySQL、Redis、Webプロジェクトを動かせます。最後に、サービスへの接続とデータの保持まで確認しましょう。

対象は、MシリーズチップのMacで初めて開発環境を整える方です。 MySQL、Redis、Webアプリをまとめて起動したい開発者にも向いています。 ローカルでは継続して動かしにくく、遠隔開発も検討したいチーム向けの判断材料も扱います。

MacでDockerを動かす前に、何を確認しますか?

Docker Desktopは、Mac上にLinuxコンテナを実行するための仮想化環境を用意します。Apple Silicon対応のインストーラーを選ぶことに加え、コンテナイメージがarm64に対応しているかも確認が必要です。Docker Desktopの対応条件は更新されるため、インストール前にDocker公式のMac向けインストール手順とシステム要件を確認してください。Linuxを仮想マシンで動かす仕組みは、AppleのVirtualizationに関する説明でも確認できます。

見落としやすい制約は、チップの種類だけではありません。イメージがarm64に対応していないと起動に失敗したり、エミュレーションで動いても想定外の挙動になったりすることがあります。また、ポートがMac上の別プロセスと競合する、環境変数の名前がアプリ側と合わない、データをコンテナ内だけに保存して作り直した際に失う、といった問題も起こりやすい点です。

今回の完了条件は、Dockerコマンドが使えること、MySQLとRedisへ接続できること、WebプロジェクトにMacからアクセスできることです。加えて、Composeでコンテナを作り直した後も、名前付きボリュームに保存したデータが残るか確認します。

第一歩:Docker Desktopを導入して起動する

Docker公式のMac向けページから、Apple Silicon用のDocker Desktopを取得します。インストール後にアプリを起動し、表示される初回確認や権限の案内を確認してください。インストール画面やシステム要件は変わる場合があるため、画面の文言はその時点の公式案内を基準にします。

起動後、ターミナルで次のコマンドを実行します。

bash
docker version
docker info
docker compose version

docker versionではクライアントだけでなくサーバー側の情報も表示されるか確認します。サーバー情報が取得できない場合は、Docker Desktopが起動しているかを確認し、コマンドを再実行してください。Composeのバージョン情報が表示されない場合は、Composeが利用できる状態かをComposeサービス設定リファレンスと照らし合わせます。

第二歩:イメージのアーキテクチャと起動状態を確認する

MシリーズチップのMacで、イメージが動くかどうかはどう確認しますか? まず、使うイメージの配布元がどのプラットフォームに対応しているか確認します。Dockerのマルチプラットフォームイメージの説明では、複数のアーキテクチャ向けイメージの仕組みが説明されています。非対応の表示が出たら、先に公式イメージの対応状況を確かめてください。根拠なく--platformを指定して回避するのではなく、対象イメージとアプリの依存関係がその構成で動くかを確認するのが先です。

MySQLイメージを取得して、ローカルで見えるアーキテクチャを調べます。

bash
docker pull mysql:8.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' mysql:8.4
docker run --rm mysql:8.4 --version

ローカルのイメージ情報が示す値と、MySQL公式イメージの説明にあるサポート情報を見比べます。出力が確認できても、それだけでアプリケーション全体の互換性が保証されるわけではありません。実際の起動ログと、アプリからの接続結果まで確かめます。

第三歩:ComposeでMySQL、Redis、Webプロジェクトをまとめる

Mac上でMySQLとRedisを同時に起動し、Webプロジェクトから接続するにはどうしますか? Composeファイルでサービス、環境変数、ポート、ネットワーク、ボリュームを定義します。Webサービスのbuild: .は、Composeファイルと同じプロジェクトにDockerfileがある想定です。アプリが使用する環境変数名や待ち受けポートはプロジェクトに合わせて調整してください。

次の例はローカル開発用です。change-thisは説明用の仮値であり、実際に使う値は.envに設定してください。これらの設定や認証情報を、本番環境へそのまま流用しないでください。

compose.yaml:

yaml
services:
  mysql:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?set MYSQL_ROOT_PASSWORD in .env}
      MYSQL_DATABASE: app_dev
      MYSQL_USER: app
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:?set MYSQL_PASSWORD in .env}
    ports:
      - "127.0.0.1:3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "mysqladmin ping -h 127.0.0.1 -uroot -p\"$${MYSQL_ROOT_PASSWORD}\" --silent"
        ]
      interval: 5s
      timeout: 5s
      retries: 20

  redis:
    image: redis:7-alpine
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 20

  web:
    build: .
    environment:
      MYSQL_HOST: mysql
      MYSQL_PORT: "3306"
      MYSQL_DATABASE: app_dev
      MYSQL_USER: app
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:?set MYSQL_PASSWORD in .env}
      REDIS_HOST: redis
      REDIS_PORT: "6379"
    ports:
      - "127.0.0.1:8080:8080"
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy

volumes:
  mysql_data:
  redis_data:

.envの例:

dotenv
MYSQL_ROOT_PASSWORD=change-this-root-password
MYSQL_PASSWORD=change-this-app-password

.envは公開リポジトリへ登録せず、実際の値に置き換えます。MYSQL_HOSTとREDIS_HOSTにはCompose内のサービス名を指定します。コンテナ間通信ではlocalhostではなく、同じComposeネットワーク上のサービス名を使います。portsはMac側からの入口を作り、127.0.0.1を付けることでローカルからの接続に限定します。Composeのサービス設定とネットワークの扱いは、先に挙げた公式リファレンスを参照してください。

MySQLの公式イメージは初期化用の環境変数や保存先を提供しています。MySQL公式Docker入門と前掲の公式イメージの案内を確認し、既存の開発データがある場合は初期化前に退避してください。Redisのイメージや利用方法は、Redis公式イメージの説明で確認できます。

depends_onだけでは、データベースが接続受付を始めるまで待つとは限りません。この例ではヘルスチェックの成功を条件にしており、Composeの起動順序とヘルスチェックの動作は公式の起動順序ガイドに沿って設定しています。Webアプリ側も、接続失敗時に再試行できる設計が必要です。

第四歩:起動後に接続とデータ保存を確かめる

MacからWeb、MySQL、Redisをどう確認しますか? プロジェクトのルートで起動します。

bash
docker compose up -d --build
docker compose ps
docker compose logs --tail=100 mysql redis web

psで各サービスの状態を確認し、起動に失敗した場合は該当サービスのログを読みます。Webサービスが指定ポートで待ち受けるアプリなら、Macから次のように応答を確認できます。

bash
curl -i http://localhost:8080

画面が開かない場合は、アプリがコンテナ内で8080を待ち受けているか、実際の待ち受けポートとComposeのポート設定が一致しているかを確認します。Docker DesktopのMacとコンテナ間の通信については、Docker公式のネットワーク説明も参照してください。

MySQLには、Composeのサービス名を指定して接続します。

bash
docker compose exec mysql mysql -uapp -p app_dev -e "SELECT 1;"

パスワード入力後に結果が返れば、データベースへの接続を確認できます。Redisは書き込みと読み出しを続けて実行します。

bash
docker compose exec redis redis-cli SET compose-check ok
docker compose exec redis redis-cli GET compose-check

返り値がokなら読み書きができています。データ保存先を名前付きボリュームに指定したサービスでは、通常のdocker compose down後に再起動して読み出しを試します。ボリュームを削除するdocker compose down -vはデータも消す操作なので、保持を確認する前に実行しないでください。

起動しないときは、症状から切り分ける

  • アーキテクチャの不一致:docker image inspectでローカルイメージの情報を確認し、公式イメージの対応情報と照合します。続けてdocker compose logsで起動時のエラーを調べます。
  • ポートの競合:docker compose psと起動ログを見て、ホスト側のポート設定を別の空きポートへ変更します。変更後はWebアプリのアクセス先も合わせます。
  • 環境変数の誤り:.envのキー名、Compose内の参照名、アプリが実際に読む設定名を照合します。接続先は、コンテナ間ならmysqlやredis、Mac上のクライアントならlocalhostです。
  • 起動順序やヘルス状態の異常:docker compose psと各サービスのログを確認し、依存先がhealthyになっているかを調べます。Composeの起動順序ガイドにあるように、起動順と接続受付可能な状態は区別してください。
  • データが残らない:docker compose configでボリューム設定を確認します。名前付きボリュームを使っているか、誤ってdown -vを実行していないかを調べます。

構成を選ぶための比較

用途Macからの接続コンテナ間の接続データの扱い
Webアプリlocalhost:8080Compose内のサービス名アプリの保存方式に合わせる
MySQLlocalhost:3306mysql:3306mysql_dataに保存
Redislocalhost:6379redis:6379redis_dataに保存

表中のポートはこのCompose例で割り当てた値です。MySQLとRedisのイメージが使用する標準的な接続ポートは、それぞれの公式イメージの記載を確認してください。ホスト側のポートは変更できますが、変更後の接続先も更新が必要です。

確認項目Composeで見る場所合格の目安
イメージimageとdocker image inspect公式情報とアーキテクチャが合う
サービス状態docker compose ps必要なサービスが起動し、ヘルスチェックも成功
Web接続portsとcurlMacから応答が得られる
DB接続MYSQL_HOSTとMySQLコマンドSELECT 1の結果を確認できる
Redis接続REDIS_HOSTとRedisコマンド書き込み値を読み出せる
データ保持名前付きボリューム通常の停止・再起動後も必要なデータが残る
運用方法向いている状況主な制約
ローカルMac開発中に手元で確認するMacの停止中は開発環境も利用できない
遠隔のMac環境ローカルで継続稼働しにくい、遠隔から開発したい接続方法や利用可能な構成を事前に確認する
本番環境利用者向けサービスを継続運用するこの例の認証情報や公開設定をそのまま使わない

完了チェックリストと次の環境選び

  • [ ] Apple Silicon対応のDocker Desktopをインストールし、Dockerサーバーの情報を確認した
  • [ ] 利用する各イメージのアーキテクチャを公式情報と照合した
  • [ ] docker compose psとログで、サービス状態を確認した
  • [ ] MacからWebへアクセスし、MySQLとRedisへの接続を確かめた
  • [ ] 通常の停止・再起動後に、必要なデータが残ることを確認した
  • [ ] .envの認証情報を本番用設定と分け、公開リポジトリに含めないようにした

ローカルMacは、手元でコードを変更しながら動作を確かめる用途に適しています。一方、Macの電源やDocker Desktopの稼働状態に依存し、別の場所からの継続利用には設定や接続管理が必要です。ローカルで環境を維持しにくい場合は、遠隔開発向けのZekVPSのMacレンタル案内を確認し、必要な接続方法や利用条件が目的に合うかを先に照合してください。日本での利用を検討する場合は、日本向けMacレンタルの案内も判断材料になります。恒常的な高負荷運用や物理インターフェースが必須なら、契約前に要件を整理し、ローカルのMacや別の構成も含めて選ぶのが安全です。

開発環境を広げるなら、ZekVPSのCloud Macをご活用ください

Apple M4搭載のMac miniを専有でき、開発や検証に使えるmacOS環境をリモートで利用できます。

管理者権限があり、必要な開発ツールや依存環境をご自身の用途に合わせて整えられます。

MCP や Agent をデモから日常運用へ移すなら、スナップショット可能なクラウド Mac ノードを先に固定する方が効果的です。 ZekVPS クラウド Mac mini プランを見る — 実験環境と本番デスクトップを分離すると、デプロイが安定します。

期間限定