M1・M2 MacにHomebrewでDockerをインストールする方法

  • URLをコピーしました!

この記事では、Dockerのインストールのやり方を解説します。また、あわせてHomebrewの使い方の理解が深まる内容にもなっています。

まぁMac(M1・M2含む)にDockerをインストールするのはコマンド一行で完了です。

Dockerのインストールを急ぎたい方はbrew install --cask dockerを打てばオッケーです。

ちなみに、既にformulaのDockerをインストールしている方は、本コマンド(Docker Desktopのインストール)に失敗するので注意してください(※参考)

結論

% brew install --cask docker

ここから本題ですが。

ただ、経験上、理解せずに環境を構築しても後々「結局なんだっけ?」となるだけで良いことはありません。急いだところで時間的なメリットは大してないので、この記事でゆっくりやるのをオススメします。

なぜなら、上のコマンドbrew install --cask dockerには分からないことだらけだからです。

不明点

  • パッケージは最新か?
  • brew install --cask dockerって何してるの?
  • インストールしたは良いが削除はどうするのか?
  • というか、そもそもHomebrewってなんだっけ?

Dockerをインストールしたは良いが、何だか分からないままだぞ?となりがちです。

なので、この記事ではDockerインストールの手順を「パッケージ検索⇒詳細確認⇒インストール」という流れで解説します。

くどいかも知れませんが、Homebrewの基本となるformula、Caskなど含めて理解できるからです。

それでは、Dockerのインストールのやり方を解説します。

目次

Mac(M1・M2含む)にDockerをインストールする手順

先に何をインストールするか書いておきます。

Docker Desktop for Macをインストールしておけばオッケーです。すなわち、caskのdockerをインストールすれば良いわけです。

brewのコマンドは下です。

% brew install --cask docker

Docker Desktop for Macだけで十分な理由は、Docker、Docker Composeなど一式でインストールされるからです。

Docker Desktop

  • Docker Desktop for Mac
  • Docker Engine
  • Docker CLI
  • Docker Compose
  • Notary
  • Kubernetes
  • Credential Helper
    ※Docker Desktop 概要 - https://docs.docker.jp/desktop/index.html

じゃあ、Homebrewでどうやってやるの?というのが、記事の趣向であり副題です。

どのDockerを選んでインストールすれば良いのかなど、インストール手順に沿って解説します。

Dockerインストール手順

  • 前準備:Homebrewをインストール
  • ① Dockerのバージョンを確認する
  • ② Dockerのパッケージ情報を見る
  • ③ Dockerをインストールする
  • ④ パスが通ってるかを確認する
  • ⑤ HomebrewでDockerを削除する

長いように見えますが、これがHomebrewの使い方の基本でもあるのできちんと確認していきましょう。

前準備:Homebrew をインストールする

引用:Homebrew
引用:Homebrew

Homebrewをインストールしておきましょう。Homebrewは、Macユーザーなら100%インストールするパッケージマネージャーです。

※すでにHomebrewをインストールしている方は読み飛ばして下さい。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

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

.zprofileにPATHを追加してくださいと表示されるので下のコマンドを実行します。

==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/ユーザー名/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
    https://docs.brew.sh

brew -vなどして.zprofileにPATHが追加されたのを確認すれば完了です。

Homebrewの基本的な使い方は下記を参考にして下さい。

① Dockerのバージョンを確認する

% brew search docker 

先ずはbrew search dockerでパッケージを検索します。

ちなみに書式はbrew search text or regexなので正規表現を使ってパッケージ検索できます。

実行例

% brew search docker 
==> Formulae
docker                                   docker-machine-driver-vmware
docker-buildx                            docker-machine-driver-vultr
docker-clean                             docker-machine-driver-xhyve
docker-completion                        docker-machine-nfs
docker-compose                           docker-machine-parallels
docker-compose-completion                docker-slim
docker-credential-helper                 docker-squash
docker-credential-helper-ecr             docker-swarm
docker-gen                               docker2aci
docker-ls                                dockerize
docker-machine                           lazydocker
docker-machine-completion                powerman-dockerize
docker-machine-driver-hyperkit           mockery

==> Casks
docker                                   dozer
docker-toolbox                           homebrew/cask-versions/docker-edge
dockey

インストールするのはdockerですがFormulaeCaskに同じ記載があります。

% brew search docker 
==> Formulae
docker                                   docker-machine-driver-vmware
:
:
:

==> Casks
docker                                   dozer
:
:
:

FormulaeとCaskの違いは、CUIアプリかGUIアプリかの違いです。

  • Formulae:CUIアプリ
  • Cask:GUIアプリ

DockerをGUIで操作できるDocker Desktop for Macもインストールしておきたいので、Cask(GUI)のDockerをインストールします。

ちなみに何が含まれるか?はパッケージ確認コマンドinfoでパッケージ詳細を見てから判断しています。

HomeBrewのバージョンで文法が違う

HomeBrew Caskのインストール文法はバージョンによって異なります。

  • 当初は「brew cask install zoom」などでした。
  • その後は「--cask」をつけていました →「brew install --cask zoom」。
  • 最新バージョンでは「--cask」の明示は不要になりました →「brew install zoom」。

Homebrewの記事には古い書式が入り乱れているため注意してください。

② Dockerのパッケージ情報を見る

% brew info docker
% brew info --cask docker

使うコマンドはbrew infoです。

今回はFormulaeCasksdockerという同じ名前のパッケージなので--caskで識別します。

brew info docker 実行例

% brew info docker  
Warning: Treating docker as a formula. For the cask, use homebrew/cask/docker
==> docker: stable 20.10.18 (bottled), HEAD
Pack, ship and run any application as a lightweight container
https://www.docker.com/
Conflicts with:
  docker-completion (because docker already includes these completion scripts)
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/docker.rb
License: Apache-2.0
==> Dependencies
Build: go ✘, go-md2man ✘
==> Options
--HEAD
	Install HEAD version
==> Analytics
install: 67,682 (30 days), 174,944 (90 days), 733,013 (365 days)
install-on-request: 67,468 (30 days), 174,333 (90 days), 729,757 (365 days)
build-error: 1 (30 days)

Formula(CUI)のDockerというのは、Docker本体つまりDocker Engineです。

ちなみにWarning: Treating docker as a formula. For the cask, use homebrew/cask/dockerという表示は、caskのdockerではなくformulaのdockerを選んでいますという警告文です。

FormulaでインストールされるDocker

  • Docker Engine
  • Docker CLI

CUIのみでDockerを操作する方向けです。しかし、Docker Composeも入れて使うはずです。

Cask(GUI)でDockerをインストールしておけば、Docker ComposeなどCUI、GUI環境に必要なアプリ一式をインストールできます。

なので、Cask(GUI)でDockerを入れます。

brew info --cask docker 実行例

% brew info --cask docker
==> docker: 4.12.0,85629 (auto_updates)
https://www.docker.com/products/docker-desktop
Not installed
From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/docker.rb
==> Names
Docker Desktop
Docker Community Edition
Docker CE
==> Description
App to build and share containerized applications and microservices
==> Artifacts
Docker.app (App)
/Applications/Docker.app/Contents/Resources/etc/docker-compose.bash-completion -> /opt/homebrew/etc/bash_completion.d/docker-compose (Binary)
/Applications/Docker.app/Contents/Resources/etc/docker.zsh-completion -> /opt/homebrew/share/zsh/site-functions/_docker (Binary)
/Applications/Docker.app/Contents/Resources/etc/docker.fish-completion -> /opt/homebrew/share/fish/vendor_completions.d/docker.fish (Binary)
/Applications/Docker.app/Contents/Resources/etc/docker-compose.fish-completion -> /opt/homebrew/share/fish/vendor_completions.d/docker-compose.fish (Binary)
/Applications/Docker.app/Contents/Resources/etc/docker-compose.zsh-completion -> /opt/homebrew/share/zsh/site-functions/_docker_compose (Binary)
/Applications/Docker.app/Contents/Resources/etc/docker.bash-completion -> /opt/homebrew/etc/bash_completion.d/docker (Binary)
==> Analytics
install: 24,389 (30 days), 78,442 (90 days), 296,513 (365 days)

brew info --cask docker すると分かりますが、Cask(GUI)のDockerはDocker Desktop for Macがインストールされます。

Docker Desktop for Macには下記が含まれます。

Docker Desktop for Mac

  • Docker Desktop
  • Docker Engine
  • Docker CLI
  • Docker Compose
  • Notary
  • Kubernetes
  • Credential Helper
    ※Docker Desktop 概要 - https://docs.docker.jp/desktop/index.html

繰り返しますが、CaskのDockerをインストールすれば、Docker本体、Docker Composeなど一式で入ります。

長々説明してきましたが、DockerはCaskのDockerをインストールしておけば良いということです。

[keg-only]はシンボリックリンクを作成しない

brewでインストールする際はパッケージ情報を見る癖をつけましょう。

中にはシンボリックリンクが自動で作成されないパッケージがあるからです。そういった情報もinfoで見ることができます。

OpenJDKは[keg-only]

% brew info openjdk@17
==> openjdk@17: stable 17.0.4.1 (bottled) [keg-only]
Development kit for the Java programming language
https://openjdk.java.net/
:
:
:

openjdk@17 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.

If you need to have openjdk@17 first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc

For compilers to find openjdk@17 you may need to set:
  export CPPFLAGS="-I/opt/homebrew/opt/openjdk@17/include"

==> Analytics
install: 14,818 (30 days), 34,316 (90 days), 49,645 (365 days)
install-on-request: 11,162 (30 days), 26,819 (90 days), 41,077 (365 days)
build-error: 47 (30 days)

一行目に==> openjdk@17: stable 17.0.4.1 (bottled) [keg-only]と表示されます。[keg-only]はシンボリックリンクが作成されないという表示です。

シンボリックリンクが作成されない理由は、インストール時にインストールバージョンで上書きされると互換性が損なわれるため、それを防ぐためです。

③ Dockerをインストールする

% brew install --cask docker

さて、ようやくDockerをインストールします。インストールはbrew install --cask dockerで完了です。

brew install --cask docker 実行例

% brew install --cask docker
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

==> Downloading https://desktop.docker.com/mac/main/arm64/85629/Docker.dmg
######################################################################## 100.0%
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'
==> Linking Binary 'docker-compose.bash-completion' to '/opt/homebrew/etc/bash_c
==> Linking Binary 'docker.zsh-completion' to '/opt/homebrew/share/zsh/site-func
==> Linking Binary 'docker.fish-completion' to '/opt/homebrew/share/fish/vendor_
==> Linking Binary 'docker-compose.fish-completion' to '/opt/homebrew/share/fish
==> Linking Binary 'docker-compose.zsh-completion' to '/opt/homebrew/share/zsh/s
==> Linking Binary 'docker.bash-completion' to '/opt/homebrew/etc/bash_completio
🍺  docker was successfully installed!

すんなりDockerが入ります。インストール後に何か追加で必要になる設定もありません。

何よりHomebrewのプロンプトは親切にも程があって、Docker Desktopを起動させるならMoving App 'Docker.app' to '/Applications/Docker.app'にGUIアプリがあると表示してくれます。

ということで、Dockerがきちんとインストールされたか確認していきましょう。

③' 注意:すでにFormulaのDockerを入れているとbrew install --cask dockerに失敗する

% brew install --cask docker 
==> Downloading https://desktop.docker.com/mac/main/arm64/85629/Docker.dmg
Already downloaded: /Users/m1_macbookair2020/Library/Caches/Homebrew/downloads/5dd12ec046525c5d0d7400cc1791fb863301ca25cb0bff092bb07459b9dbb31c--Docker.dmg
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'
==> Linking Binary 'docker-compose.bash-completion' to '/opt/homebrew/etc/bash_c
==> Unlinking Binary '/opt/homebrew/etc/bash_completion.d/docker-compose'
==> Backing App 'Docker.app' up to '/opt/homebrew/Caskroom/docker/4.12.0,85629/D
==> Removing App '/Applications/Docker.app'
==> Purging files for version 4.12.0,85629 of Cask docker
Error: It seems there is already a Binary at '/opt/homebrew/share/zsh/site-functions/_docker'.

すでにformula(CUI)でDockerを入れていると、cask(GUI)のDockerのインストールに失敗します。

Error: It seems there is already a Binary at '/opt/homebrew/share/zsh/site-functions/_docker'.

このため、cask(GUI)のDockerをインストールするには、先ずformula(CUI)のDockerを削除してからcask(GUI)のDockerを入れます。

コマンドの流れ

% brew uninstall docker        
Warning: Treating docker as a formula. For the cask, use homebrew/cask/docker
Uninstalling /opt/homebrew/Cellar/docker/20.10.18... (12 files, 55.4MB)

% brew install --cask docker
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

==> Downloading https://desktop.docker.com/mac/main/arm64/85629/Docker.dmg
Already downloaded: /Users/m1_macbookair2020/Library/Caches/Homebrew/downloads/5dd12ec046525c5d0d7400cc1791fb863301ca25cb0bff092bb07459b9dbb31c--Docker.dmg
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'
==> Linking Binary 'docker-compose.bash-completion' to '/opt/homebrew/etc/bash_c
==> Linking Binary 'docker.zsh-completion' to '/opt/homebrew/share/zsh/site-func
==> Linking Binary 'docker.fish-completion' to '/opt/homebrew/share/fish/vendor_
==> Linking Binary 'docker-compose.fish-completion' to '/opt/homebrew/share/fish
==> Linking Binary 'docker-compose.zsh-completion' to '/opt/homebrew/share/zsh/s
==> Linking Binary 'docker.bash-completion' to '/opt/homebrew/etc/bash_completio
🍺  docker was successfully installed!
                                          

④ パスが通ってるかを確認する

M1・M2 Mac上でも起動する「Docker Desktop for Mac」
M1・M2 Mac上でも起動する「Docker Desktop for Mac」

Dockerがきちんとインストールされているか、念の為、確認しておきましょう。

実はここでも注意が必要です。

どういうわけかDockerをインストールした直後brew install --cask docker直後)だとdockerコマンドが通りません。

dockerコマンドが通らない

% brew install --cask docker
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

==> Downloading https://desktop.docker.com/mac/main/arm64/85629/Docker.dmg
Already downloaded: /Users/m1_macbookair2020/Library/Caches/Homebrew/downloads/5dd12ec046525c5d0d7400cc1791fb863301ca25cb0bff092bb07459b9dbb31c--Docker.dmg
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'
==> Linking Binary 'docker-compose.bash-completion' to '/opt/homebrew/etc/bash_c
==> Linking Binary 'docker.zsh-completion' to '/opt/homebrew/share/zsh/site-func
==> Linking Binary 'docker.fish-completion' to '/opt/homebrew/share/fish/vendor_
==> Linking Binary 'docker-compose.fish-completion' to '/opt/homebrew/share/fish
==> Linking Binary 'docker-compose.zsh-completion' to '/opt/homebrew/share/zsh/s
==> Linking Binary 'docker.bash-completion' to '/opt/homebrew/etc/bash_completio
🍺  docker was successfully installed!

% docker -v                 
zsh: command not found: docker

この原因はDocker Desktop for Macアプリを一度も起動させていないからです。このため、Docker Desktop for Macアプリを一度起動させます。

CUI上からDocker Desktop for Macを起動させるコマンドは下記です。

% open /Applications/Docker.app
※注意:コマンドを使わずGUI上で起動しても構いません。
問題:Docker Desktop for Macは一回起動させて管理者権限に承諾しないとDockerコマンドが通らない
問題:Docker Desktop for Macは一回起動させて管理者権限に承諾しないとDockerコマンドが通らない

Docker Desktop for Macを一度起動した後、docker -vをすればDockerのコマンドが通るのを確認できます。

% docker -v
Docker version 20.10.17, build 100c701

これのせいで、僕はずっと悩みました。仕様の話かも知れませんが、小一時間は悩みました。マジでくそウザかったです。

延々ループしました

  • Docker本体がない?
  • Docker DesktopにはDocker本体も含まれているはず。
  • まぁ、試しにFormulaのDocker本体を入れる⇒コマンドが通る
  • FormulaのDockerを入れるとDocker Desktopをインストールできない(※参考)

上記を延々ループしました。

インストール後は、コマンド確認が常だから、Docker Desktopを起動させずともさっさとパス通せや、と思います。

⑤ HomebrewでDockerを削除する

% brew uninstall --cask docker

Docker Desktop for Macをアンイストールする方法も忘れがちなので記載しておきます。Caskで入れたDockerなので--caskを指定してアンイストールします。

実行例

% brew uninstall --cask docker
==> Uninstalling Cask docker
==> Removing launchctl service com.docker.helper
==> Removing launchctl service com.docker.vmnetd
==> Removing files:
/Library/PrivilegedHelperTools/com.docker.vmnetd
/usr/local/bin/com.docker.cli
/usr/local/bin/docker-compose-v1
/usr/local/bin/docker-compose
/usr/local/bin/docker-credential-desktop
/usr/local/bin/docker-credential-ecr-login
/usr/local/bin/docker-credential-osxkeychain
/usr/local/bin/docker
/usr/local/bin/hub-tool
/usr/local/bin/hyperkit
/usr/local/bin/kubectl.docker
/usr/local/bin/kubectl
/usr/local/bin/notary
/usr/local/bin/vpnkit
/opt/homebrew/share/zsh/site-functions/_docker
/opt/homebrew/share/zsh/site-functions/_docker_compose
/opt/homebrew/share/fish/vendor_completions.d/docker.fish
/opt/homebrew/share/fish/vendor_completions.d/docker-compose.fish
/opt/homebrew/etc/bash_completion.d/docker
/opt/homebrew/etc/bash_completion.d/docker-compose
==> Backing App 'Docker.app' up to '/opt/homebrew/Caskroom/docker/4.12.0,85629/D
==> Removing App '/Applications/Docker.app'
==> Purging files for version 4.12.0,85629 of Cask docker

brew uninstall --cask dockerでDocker Desktopを簡単に削除できます。

コメント

コメントする

目次