Macに触れたばかりで、Dockerの設定やcomposeでの環境構築が思うように進まず戸惑っていませんか?
その悩みを解消するために、Mac歴10年を超える開発現場で培った体験をもとに、インストールからcomposeファイルの作成、複数サービスの同時起動までを順を追ってやさしく案内します。GUIとターミナル双方の手順を示すので、自分に合う方法を選びやすく、ポートの競合やAppleSilicon特有のイメージ選択といったつまずきポイントも丁寧にフォローし、作業中のストレスを最小限にします。
手順を確認してコンテナ開発環境を整え、快適な作業リズムを手に入れましょう。
MacへのDockerDesktop導入とCompose起動までをやさしく案内

Mac上でDockerDesktopを使えるようにするのは、最初はドキドキすることもありますが、この手順を追うだけでサクッと動かせます。
- HomebrewでDockerDesktopをインストール:
brew install --cask docker
を実行 - DockerDesktopを起動:アプリケーションからDockerを開き、初回セットアップを完了
- DockerCompose用の設定確認:Dockerアイコン→Preferences→ResourcesでCPU/メモリを調整
- composeファイルを用意:プロジェクトルートに
docker-compose.yml
を配置 - Composeを起動:ターミナルで
docker compose up -d
を実行
起動待ちのあいだ、クジラマークがアニメーションするので焦らず待つとスムーズです。
DockerDesktopを公式サイトから入れる方法

公式サイトから入手する方法は、ブラウザでDocker公式ページにアクセスして、Mac向けのインストーラ(.dmgファイル)をダウンロードするだけです。ファイルを開いたらアプリケーションフォルダへドラッグ&ドロップして起動すれば、すぐにDockerDesktopが使い始められます。
公式インストーラ版を選ぶときのポイントは以下の通りです。
- 安定したサポート:最新のmacOS VenturaやSonomaにも対応していて安心
- かんたん操作:インストーラを開いてドラッグ&ドロップするだけで完了
- 自動アップデート:バックグラウンドで新バージョンをお知らせしてくれる
- Compose標準搭載:追加インストールなしでdocker-composeコマンドが使える
この方法は、コマンド操作に慣れていない方や、公式の安定版をサクッと入れたいときに特におすすめです。
①公式サイトにアクセスしてインストーラをダウンロード
SafariやChromeなどお好きなブラウザでhttps://www.docker.com/products/docker-desktopを開いてください。
画面上の「Mac with Apple chip」か「Mac with Intel chip」のボタンを押し、ダウンロードを開始してください。
CPUタイプを間違えるとインストールが進まないので「このMacについて」で確認を忘れずに。
②ダウンロードしたdmgを開いてアイコンをApplicationsへドラッグ
SafariやChromeでダウンロードフォルダを開き、SwellDockerCompose.dmgをダブルクリックするとインストールウィンドウがポンと現れます。
インストールウィンドウ内でSwellDockerComposeのアイコンをつかんでApplicationsフォルダへドロップするとコピーが始まります。これでアプリがアプリケーションフォルダに追加されます。
③初回起動で権限を許可してセットアップを完了
Docker Desktopを起動すると仮想化の追加権限を求められます。「システム環境設定を開く」をクリックすると「セキュリティとプライバシー」が表示されます。
左下の鍵アイコンを押してロックを解除したあと「許可」をクリックしてください。同じ画面に「~のシステムソフトウェアの読み込みがブロックされました」と表示されたら、こちらも「許可」を押します。
続けてファイル共有のダイアログが出たら、ホームフォルダへのアクセスを許可しておくとコンテナからファイルを扱いやすくなります。
権限を与え終えるとDocker Desktopへ戻り、自動で仮想マシンの起動とDockerエンジンのセットアップが進みます。
鍵アイコンがグレーアウトしているときは、クリック後に管理者パスワードを入力する必要があります。
④メニューバーのクジラをクリックしてCompose対応を確認
画面右上のメニューバーでクジラ型アイコンを見つけてください。
クリックするとメニューが開きます。表示された中にComposeの文字があるかチェックしてください。
Composeが見つからない場合はDocker Desktopのバージョンが古いか無効になっています。設定画面のExperimentalFeatures
で有効化しましょう。
HomebrewでDockerとComposeをまとめて入れる方法

Homebrewを使えば、ターミナルからたった一行でDocker DesktopとComposeプラグインをまとめてインストールできます。brew install –cask dockerを実行するだけで、最新のDockerアプリとComposeが自動的に揃うので、あれこれダウンロード先を探し回る必要がありません。
この方法ならバージョンアップの管理もHomebrewにお任せできて、brew upgradeだけでDockerとComposeをまとめて更新できます。コマンドライン操作が慣れている方や、インストール状況をすっきり管理したい方にぴったりです。
①ターミナルを開いてbrew updateを実行
画面右上の虫眼鏡アイコンをクリックして「ターミナル」と入力しエンターキーを押すとターミナルが起動します。
brew update
とタイプしてエンターキーを押してください。
Homebrewのパッケージ情報が最新になり、あとで新しいソフトがスムーズにインストールできます。
②brew installコマンドでdockerとdocker-composeをインストール
まずはHomebrewのパッケージ情報を最新にしておくと安全です。
brew update
ターミナルから以下のコマンドを実行して、DockerのCLIとComposeをまとめてインストールします。
brew install docker docker-compose
Dockerデスクトップアプリを使わずCLIだけで動かす場合は、自分でデーモン(バックグラウンドサービス)を立ち上げる必要があります。
③docker –versionで動作をチェック
ターミナルを開いてDockerがきちんと動いているか確認します。
以下のコマンドを入力してください。
docker --version
バージョン情報として「Docker version 20.10.x」などが表示されれば準備完了です。もし「command not found」などのエラーが出たら、Docker Desktopが起動中か、またはインストール先パスに問題がないかチェックしましょう。
Tip PATH設定が原因でコマンドが見つからないことがあります。/usr/local/bin
あたりが含まれているか、echo $PATH
で確認してみてください。
④compose.ymlを用意してdocker compose upを試す
プロジェクトのルートにcompose.yml
を作成します。YAMLのインデントはスペース2つが一般的です。
version: "3.9"
services:
app:
image: nginx:latest
ports:
- "8080:80"
ターミナルでcompose.ymlのあるフォルダに移動し、コンテナを起動します。
docker compose up
を実行するとログが流れながらコンテナが立ち上がります。
バックグラウンドで動かしたい場合はdocker compose up -d
を使いましょう。
AppleSiliconとIntelMacどちらでもうまく動かすコツ

AppleSiliconとIntelMacで同じdocker‐compose.ymlを使うとき、ちょっとしたコツを押さえるとスムーズに動いてくれます。
- 公式マルチアーキ対応イメージを使う:hub.docker.comで「multi-arch」や「arm64/amd64対応」と書かれたイメージを選ぶと両方で動きやすいです。
- buildxでマルチビルドを有効にする:
docker buildx create --use
してからdocker buildx build --platform linux/amd64,linux/arm64
を使うと同じイメージが両環境で動けます。 - Rosetta2の利用:M1/M2でIntel版イメージを試すときは
arch -x86_64 docker-compose up
でRosetta2経由の実行ができます。 - プラットフォーム指定:Composeファイル内でサービスごとに
platform: linux/amd64
やlinux/arm64
を設定しておくと意図しない環境で立ち上がるのを防げます。 - ボリューム権限の統一:macOS側とコンテナ内のUID/GID差でファイルアクセスのトラブルがあるので、Composeで
user: "${UID}:${GID}"
指定すると安心です。
これらを組み合わせると一度書いたCompose設定がAppleSiliconでもIntelMacでも迷わず動いてくれるようになります。次のステップでは、具体的なコマンドや設定例をご紹介します。
①Rosettaの有無を確認して設定を切り替える
ターミナルを開いて次のコマンドを入力してください。
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
既に導入済みなら「ロゼッタは既にインストールされています」と表示されます。
Finderで「アプリケーション」フォルダを開きDocker.appを選び「情報を見る」をクリックしてください。
続いてRosettaを使用して開くにチェックを入れ、Dockerを再起動しましょう。
Rosetta対応のDockerは動作がやや遅くなる場合があります
②プラットフォームarm64指定のイメージを選ぶ
Docker Hubで公式イメージを開き、Architecture欄にarm64
が含まれているか確認しましょう。
docker pull --platform=linux/arm64 nginx:latest
arm64非対応イメージはエミュレーションで動かせますが、起動やレスポンスが遅くなることがあります。
③–platformオプションで強制指定する
docker composeコマンドやdocker runに--platform linux/amd64
を追加して実行します。たとえば次のように書きます。
docker compose up --platform linux/amd64
これでIntel向けイメージを強制的にエミュレートできます。
Composeコマンドで開発環境を一瞬で立ち上げる応用ワザ

応用ワザ | 効果 |
---|---|
–buildオプション利用 | ソース変更分だけ再ビルドして起動時間を短縮 |
-d(デタッチ)起動 | 端末を占有せずバックグラウンドで開発環境をキープ |
–profile指定 | 必要なサービスだけ立ち上げて軽量化が可能 |
–force-recreate併用 | 古いキャッシュをクリアして確実に最新状態で立ち上げ |
–parallelオプション | 複数コンテナを同時起動して待ち時間を減少 |
実際に組み合わせると、たとえば docker-compose up -d --build --force-recreate --parallel
だけで、変更を反映しつつ不要な再起動やキャッシュの不整合を避けながらサクッと開発環境を立ち上げられます。普段は煩わしかったログ確認も、docker-compose logs -f
と併用すればリアルタイムでトラブルもすぐキャッチできます。
複数サービスをリンクしてフロントとバックを同時起動

フロントエンドとバックエンドを別々のDockerサービスとして定義し、Composeでまとめて起動すると、「一度のコマンドで開発環境がそろう」ので手軽です。
サービス同士はComposeが自動的にネットワークでつないでくれるため、ホスト名でアクセスできるようになります。依存関係をdepends_on
で書いておくと、バックエンドが先に立ち上がり、続いてフロントエンドが起動するように調整できます。
この方法はバックエンドAPIと組み合わせた画面開発や、変更をリアルタイムに反映しながらテストしたいときにおすすめです。ボリュームマウントやキャッシュ設定を工夫しておくと、コード修正からのリロード時間がグッと短くなります。
compose.ymlにwebとapiを定義する
docker-compose.ymlにwebとapiを並べるだけで、開発環境が一気に楽しくなります。ここではweb(フロント用)とapi(バックエンド用)のサービスを具体的に書いていきます。
version: '3.8'
services:
web:
build:
context: ./web
dockerfile: Dockerfile
ports:
- '3000:3000'
volumes:
- ./web:/app
environment:
- NODE_ENV=development
api:
build:
context: ./api
dockerfile: Dockerfile
ports:
- '8000:8000'
volumes:
- ./api:/app
environment:
- FLASK_ENV=development
depends_on:
- web
networks:
default:
driver: bridge
こちらの例ではwebとapiそれぞれにビルド設定とポートマッピングを用意しています。volumesを使うことでローカルコードがそのまま反映され、ファイル変更のたびにコンテナを再起動しなくてすみます。
depends_onを追加すると、apiの起動前にwebが起動するよう順序を保証できます。
依存関係をdepends_onでつなぐ
docker-compose.ymlにdepends_on
を書き加えると、サービスの起動順を簡単に決められます。
例えばアプリがデータベース(db)より後に起動してほしい場合は、アプリ側の設定にdbを列挙します。
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
app:
build: .
depends_on:
- db
こうしておくとdocker-compose up時に先にdbが立ち上がり、その後でappが立ち上がります。
depends_onは起動順のみを制御します。データベースが接続可能になるまで待つわけではない点に注意してください。
docker compose upで両方まとめて起動する
まずdocker-compose.ymlがあるフォルダへ移動し、Docker Desktopが起動していることを確かめておくと安心です。
以下のコマンドでWebサーバとDBを同時に呼び出します。-dオプションを付けるとバックグラウンドで動くので、ターミナルを自由に使えます。
docker compose up -d
起動したらdocker compose ps
で状態を確かめたり、ブラウザでhttp://localhost:8080を開いて動作をチェックしましょう。
ボリュームを使ってデータを残したままコンテナを作り直す

コンテナを作り直すと、ふつうは中のデータがリセットされてしまいます。でも、ボリュームを使えば作り直してもデータが消えないので、データベースやアップロードファイルを安心して扱えます。
DockerComposeならyamlに「volumes」で名前をつけるだけでOKです。コンテナを削除しても、ボリュームだけはそのまま残るので、次に同じ名前のボリュームをマウントすれば一瞬で復活します。初学者の頃に何度かデータを飛ばしてしまった経験があるなら、まずはここを設定してみてください。
volumesセクションに名前付きボリュームを書く
namedボリュームを使うとコンテナを再作成してもデータが残って安心です。ここではdocker-compose.ymlにvolumeの名前を書く方法を順番にまとめます。
プロジェクト直下のdocker-compose.ymlをエディタで開いてください。設定変更の土台になります。
ファイル末尾にvolumesセクションがなければ作成し、好きな名前を付けます。例えばdb_dataと書くと以下のようになります。
volumes:
db_data:
serviceブロックのvolumesキーに名前を記述します。例えばdbサービスなら:/var/lib/mysqlのマウント先としてdb_dataを指定します。
services:
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
既存の同名ボリュームがあるとマウント先が上書きされるので、名前はプロジェクト単位でユニークにすると安全です。
docker compose downしてもデータが消えないことを確認
ターミナルでプロジェクトルートに移動して、docker compose down
を実行します。ボリュームを消さないオプションは不要なので、デフォルトのままで大丈夫です。
docker compose up -d
で再起動したあと、データベースやマウントしたフォルダをチェックします。前に保存したデータが消えていなければ、永続化が正常に働いています。
開発データを維持したまま再立ち上げする
まずはターミナルを開いて、Composeファイルがあるフォルダへ移動します。
cd ~/projects/my-app
データボリュームを消さずにコンテナだけを再起動します。
docker-compose down
docker-compose up -d
volumeオプションを付けない限り、中のデータはそのまま残ります。
docker-compose down に-v を付けるとボリュームが消えてしまうので注意してください。
環境変数ファイルで設定を切り替えてチーム共有

チームでDockerComposeを使うとき、環境ごとの設定がバラバラだと「あれ、このDBパス誰の?」と混乱しがちです。
そこでおすすめなのが、環境変数ファイルを切り替える方法です。たとえば、開発用は.env.development
、本番用は.env.production
というようにファイルを分けておくと、設定の使い回しがグッと楽になります。
この方法ならチームメンバーごとにローカル設定を上書きしつつ、共通のComposeファイルはそのまま共有できます。加えて、CI環境でも同じファイル名を使うだけで本番準備がスムーズなので、設定ミスが減るのが嬉しいポイントです。
実際に使う際は、リポジトリに.env.example
を置いて必要な変数を一覧にし、個人ファイルは.gitignore
に入れておくと安心です。こうすると初めてプロジェクトに参加するメンバーでも迷わず設定を準備できます。
.envファイルを用意して秘密情報を分離する
プロジェクトのルートフォルダで.envファイルを用意します。ターミナルで以下を実行してください。
touch .env
データベースやAPIキーなど、サービスで使う機密情報をまとめます。以下はPostgreSQLの例です。
POSTGRES_USER=myuser
POSTGRES_PASSWORD=securepass
POSTGRES_DB=mydb
サービス設定内でenv_fileを使えば、.envの値を読み込めます。以下のように書いてください。
services:
db:
image: postgres:13
env_file:
- .env
.envファイルには機密情報が含まれるため、必ず.gitignoreに追加してバージョン管理対象外にしてください。
compose.ymlで${}記法を使って参照する
プロジェクトルートに.envファイルを作成し、API_URL
など必要な変数をキー=値形式で並べます。
API_URL=https://example.com
DB_PASSWORD=secret
compose.ymlの該当箇所で${VAR_NAME}
を使うと、.envの値が自動的に読み込まれます。
services:
app:
environment:
API_URL: "${API_URL}"
DB_PASSWORD: "${DB_PASSWORD}"
変数にスペースや特殊文字が含まれる場合は、必ずダブルクォートで囲んでください。
環境ごとに.env.exampleを用意して共有する
開発・ステージング・本番などの環境で必要な設定をひとつのファイルにまとめます。
DATABASE_URL=postgres://user:pass@localhost:5432/dev_db
API_KEY=your_dev_api_key
LOG_LEVEL=debug
このファイルを.env.exampleとしてリポジトリに置いておくと、チームメンバーはコピーして各自の.envとして利用できます。
よくある質問

- DockerDesktopのインストール時に必要な権限が求められるのはなぜ?
Macのセキュリティ設定でシステム変更に管理者権限が必要になるためです。案内に従いシステム環境設定>セキュリティとプライバシー>一般タブでDockerDesktopを許可すれば続行できます。
- docker-composeコマンドが見つからないと出るときは?
最新バージョンではdocker compose(スペースあり)が推奨です。ターミナルで
docker compose version
を実行して動作を確認してみてください。
- コンテナが停止しないときはどうすればいい?
まず
docker ps -aq
で対象IDを確認しdocker stop ID
を試します。強制終了したいならdocker kill ID
を使います。それでも残る場合はDockerDesktopのUIからコンテナを削除するとすっきりします。
DockerDesktopは有料なの?
DockerDesktopは個人利用や売上規模が小さいチームなら無料で使えます。
ただし会社の売上が一定を超える場合はサブスクリプション契約が必要です。次のようなプランが用意されています。
- Docker Pro:個人開発や副業スタートアップ向けの有料プラン
- Docker Team:中小規模チームで共有機能やサポートを強化
- Docker Business:大企業向けに管理機能やセキュリティを充実
最新バージョンをインストールするとプランの選択画面が表示されるので、自分の利用ケースに合ったプランを選んでください。
compose.ymlとdocker-compose.ymlはどう違う?
docker-compose.ymlはDocker Composeが何も指定しないときに自動で探す標準ファイル名です。
compose.ymlはあくまでも任意のファイル名なので、Docker Composeに使いたいファイルを明示的に伝える必要があります。たとえば、docker compose -f compose.yml upのように書くイメージです。
中身のフォーマットや書き方は完全に同じなので、サービス定義やネットワーク・ボリュームの設定も両方でまったく同じように動きます。
実際の現場では環境ごとにファイルを分けるときに、compose.dev.ymlやcompose.prod.ymlといった命名にすると管理しやすくなります。
brewで入れたDockerとDockerDesktopは一緒に使える?
brewで入れたDocker(CLIツール)とDockerDesktop(GUI付き環境)は同じマシンに置いても問題ありません。ただし、どちらもデフォルトで同じUNIXソケット(/var/run/docker.sock)を使おうとするため、同時に起動すると衝突することがあります。
実際には、brew版Dockerはコマンドだけ提供していて、DockerDaemonは別途起動が必要です。一方、DockerDesktopはバックグラウンドでデーモンを管理してくれるので、初心者にはこちらのほうが手軽です。日常的にGUIからコンテナを操作したいなら、DockerDesktopに揃えておいたほうがトラブルが減ります。
どうしてもbrew版のdockerコマンドだけ使いたい場合は、DockerDesktopをインストールした状態でbrew版を残し、DockerDesktopのデーモンを動かしている状態でbrew版のCLIを使うようにすると混乱を避けられます。軽い試し運用ならbrew版、GUIで楽に操作したいならDockerDesktopと、お好みに合わせて使い分けてみてください。
AppleSiliconで動かないイメージはどうする?
AppleSiliconだとIntel向けのイメージは起動時にアーキテクチャエラーで止まってしまいます。そんなときに頼れるのがマルチアーキテクチャ対応イメージやQEMUエミュレータです。
具体的にはDockerHubでarm64タグ付きのイメージを探すか、buildxで自分のマシン向けに再ビルドするのがいちばん手軽でした。どうしてもそのまま使いたいイメージがあるときはRosetta2でamd64環境をエミュレートする方法もあります。
ネットワークが重い時のpullを速くする方法は?
ネットワークが重くてpullがちっとも進まないとイライラしますよね。そんな時はレジストリミラーを活用すると驚くほどスピードアップします。
Docker Desktopの設定画面で国内のミラーURLをポンと貼り付けるだけ。手元から遠い海外サーバーを経由せずにダウンロードできるので、通信がスムーズになります。
社内ネットワークが安定しているなら、自前のローカルレジストリを立てるのもおすすめです。イメージを一度キャッシュしておけば、以降はネット混雑を気にせず高速に取得できます。
この方法なら、大きなイメージを何度もpullする場面でもストレスフリーになります。ぜひ気軽に試してみてくださいね。
まとめ

MacでDockerDesktopを手軽に使い始めるなら、ここまでのステップで準備万端になりました。
- DockerDesktopのインストール:公式サイトからダウンロードして指示に沿って進めるだけ
- 初回起動と設定:必要な権限を許可して初期設定を確認
- DockerCompose起動:サンプルYAMLを準備してコマンド一発でコンテナを立ち上げ
- トラブルシュート:よくあるエラーへの対処ポイントを押さえておく
この流れを押さえておくと、次は自分のプロジェクトにもさくっとDockerComposeを組み込めます。軽やかにコンテナライフを楽しんでみてください。