まぁ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は、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
ですがFormulae
とCask
に同じ記載があります。
% 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 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
です。
今回はFormulae
もCasks
もdocker
という同じ名前のパッケージなので--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
をインストールしておけば良いということです。
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!
④ パスが通ってるかを確認する
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 -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を簡単に削除できます。
コメント