プログラミングの本のサンプルコードを動かすのに、Dockerを使ったものも結構見かけるようになりました。プレーンなコードで動く環境ばかりでも無いのですし、「時代はの流れだよな」という面もあるので、この期にDockerに触れていこうと思います。
ここでは、MacにDockerをインストールする方法と、ついでにコマンド補完の設定までまとめておこうと思います。
MacにDockerをインストールする
MacにDockerをインストールするには、公式サイト(https://www.docker.com/)からDocker Desktop for Macをダウンロードして、インストールするだけです。
Docker Desktop
homebrewを使ってもDockerはインストールすることはできるようですが、全ての機能をインストールするものでは無いという話もあるので、公式サイトのものインストールする方が良いでしょう。
このページからだと、「Get started」をクリックし、「Docker Desktop」のページに移動し、「Download for Mac」 をクリックして「Docker hub」のページに移動して、そこから Docker.dmg ファイルをダウンロードします。
公式サイト上部のメニューのProductsのところからもダウンロードサイトへ移動することができるので、いくつか入り口がありますが、どこからでも同じです。
インストールは、ダウンロードした Docker.dmg ファイルをダブルクリックするだけです。通常の他のアプリと同様の方法ですから難しく無いでしょう。インストールできたら、アプリケーションフォルダに移動させるだけです。途中、パスワードを求められたり、最初の起動時にセキュリティを問われることがありますが、このあたりはどのアプリのインストールでも同じですね。
このあたりは、公式サイトのドキュメントも参考にしてください。アンインストール方法も書いています。
Dockerをアプリケーションのアイコンなどから起動すると、Macの画面上部にクジラのアイコンが表示されます。
クリックするとメニューが開いて、動いている時は一番上のところに緑色の印で表示されます。
preferencesをクリックすると、Docker Desktop が起動して各種の設定ができますが、現時点では特に何も設定することは無いでしょう。
Docker Hub
上記の前に、Docker HubにSign upするという流れもあります。
Docker Hubに登録すると自分のリポジトリにDocker imegeを保存することが出来まます。GitHubに似たような仕組みのものですね。
Ducker Hubのサイトでサインアップします。
Docker ID、Email、Passwordを登録します。有料・無料の区別があるので、好みで選びましょう。とりあえずは無料で問題無いと思います。
すると登録したメールアドレスに確認のメールが届きますので、確認のリンクをクリックするとDocker Hubのアカウントが作成されます。
すると、Docker Hubのページが切り替わって、Dockerのダウンロードを促すバナーがページに表示されます。
ここからインストーラーをダウンロードしてインストールしますが、これからの操作は上のDocker Desktopのインストール方法と同じです。
Dockerのインストール完了の確認
Dockerを上記の手順で無事にインストールが完了できたかどうかは、ターミナルからDockerのバージョン確認をしてみましょう。
ターミナルを起動し、次のコマンドを入力します。
docker version
このコマンドを実行すると、次のようにターミナルに表示が返ってきます。
~ % docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
(以下略)
これで、ターミナルからDockerのコマンドを利用して操作できるのが確認できました。
Dockerコマンドは各種あって入力に手間がかかるので、コマンド補完ができるように設定します。
ターミナルシェルのzshのコマンド補完を設定
ターミナルからコマンドを入力して、tabキーを押すとコマンドの補完ができるのですが、このままではDockerコマンドの補完はできません。
ドキュメントの記載に、コマンド補完の設定方法はあります。
ここで説明されているのはbashとzshでの設定方法です。
現在のMacのターミナルはzshが標準とされていますので、そちらで行わないと行けません。
bashを使っている人はそれに従えば良いと思うのですが、この公式ドキュメントのzshの方法のままでは、Macの標準のzshでは上手く行かない面もあるようです。(homebrewでzshをインストールして使っている場合の方法なのかなと思ったりしています)
そこで、ここでは公式サイトの方法も参考にしながら、Macの標準のzshを使っている場合についての設定方法を見ていこうと思います。
公式ドキュメントの方法を補足する形でのコマンド補完の設定
まずターミナルを起動して、ドキュメントにもあるように次のコマンドを実行して、インストールしたDockerアプリの中にあるzsh用の補完スクリプトのシンボリックリンクを作成します。
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose
ドキュメントにはここまでしか書かれていません。
これに続けて、ターミナルなどから、.zshrc ファイルを開きます。次のように記述して、ターミナル起動時に補完が読み込まれるように設定します。
fpath=(/usr/local/share/zsh/site-functions $fpath)
zstyle ':completion:*:*:docker:*' option-stacking yes
zstyle ':completion:*:*:docker-*:*' option-stacking yes
autoload -Uz compinit && compinit -i
詳細は省略しますが、順に、補完スクリプトへのパス、zstyleは補完の制御処理、autoloadはターミナル起動時にこれらを自動で読み込むための記述です。
この上記のような記述が無いので、公式ドキュメントのzshのコマンド補完が上手く行かないこともあるのでは無いでしょうか。
記述したら、保存してターミナルを再起動します。
これで、Dockerコマンドをターミナルで利用した時に、tabキーを押せば補完が効くようになるはずです。
補完スクリプトを保存するディレクトリを作成して設定する方法
上の方法と似たような形ですが、Homeディレクトリの直下に、補完スクリプトを保存するディレクトリを作成して設定する方法をまとめておきます。
まず、ターミナルを起動して、補完スクリプトを保存するディレクトリを次のように作成します。
mkdir -p ~/.zsh/completion
次に、インストールしたDockerアプリの中にあるzsh用の補完スクリプトのシンボリックリンクを、先ほど作ったディレクトリの中に作成します。次のコマンドをターミナルで実行します。
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion ~/.zsh/completion/_docker
ln -s $etc/docker-compose.zsh-completion ~/.zsh/completion/_docker-compose
シンボリックリンクの記述が、先ほどと違うこと以外は同じ操作です。
次に、.zshrc ファイルを開いて、次のように記述して、ターミナル起動時に補完が読み込まれるようにします。ファイルパスが上と違う以外は同じ記述です。
fpath=(~/.zsh/completion $fpath)
zstyle ':completion:*:*:docker:*' option-stacking yes
zstyle ':completion:*:*:docker-*:*' option-stacking yes
autoload -Uz compinit && compinit -i
fpathの記述が違うだけで、他は同じです。
記述したら、保存してターミナルを再起動します。
こちらの方法でも、Dockerコマンドをターミナルで利用した時に、tabキーを押せば補完が効くようになるはずです。どちらのやり方でもいいと思います。
まとめ
ここでは、MacにDockerをインストールする方法をまとめてみました。インストール自体は特に難しいところは無いはずです。
homebrewでのDockerのインストールでは全ての機能が使えるものでは無いという話ですので、公式サイトのものを使いましょう。
Docker Hubに登録して、そこからインストールしても構いません。
ターミナルでのDockerコマンド補完の設定は、自分が使っているシェルによって方法が違うので、確認が必要です。