はじめに (宣伝アリ)
なんと、一週間後の11月25日に山Pの写真集が発売されます!!
最初で最後の写真集らしいので楽しみですね☆ wkwk
はい、というわけで (どういうわけだ)
「パンがなければケーキを食べればいいじゃない」
「Docker Desktopが無いならMinikube(HyperKit)を使えばいいじゃない」
別にMinikube × HyperKitじゃなくても、有料化回避の記事でよく見るMultipassでもいいんですけど、結局あれCLIとかDockerHostの設定とか自前でやるじゃないですか?
そういう諸々が面倒でしたのでMinikubeを使うようにしました。
※ これはIntel Mac向けの記事です。
※ Docker Desktopが有料化されるのは組織人数が250人以上、もしくは年間売り上げ1000万ドル以上の組織または個人です。
Docker Engineについて
前提知識として、Dockerは実はClientとDaemonでソフトが分かれています。
そのIssueがこちらです
以下の公式Docに書いてあるように今の所WindowsとLinux用にDaemonは提供されていますが、Macには提供されていません (ぴえん)
https://docs.docker.com/engine/install/binaries/
Static binaries for the Docker daemon binary are only available for Linux (as dockerd) and Windows (as dockerd.exe).
DockerのIssueで「Docker for MacはVM(HyperKit)で動いてるやん?だからわざわざ、エンジンをMac上で起動する必要ないやろ。」って言ってます。
ClientはMac用にも配布してくれてるみたいでこちらでBinaryで提供されてるみたいです。
Docker client are available for Linux, Windows, and macOS (as docker).
Docker DesktopからDocker CLIに移行する手順
まず、Docker DesktopのダッシュボードからDocker Desktopをアンインストールします。(当たり前)
minikubeをインストールします。
brew install minikube
そのまま起動しようとするとhyperkitが無いよと言われます。
hyperkitをインストールします。
brew install hyperkit
minikubeを起動します
minikube start
# ※ configセットしてないのでデフォルト設定でリソースが取られます。
# CPU=2, Memory=6GB, Disk=20GB
ホストマシン側にもDocker Clientが欲しいのでインストールします。(sshしたくない)
brew install docker docker-compose
Compose is now a Docker plugin. For Docker to find this plugin, symlink it
docker-composeはpluginになったんで、pluginとして使うにはシンボリックリンク貼ってって言ってます。
なので、シンボリックリンクを貼ります。
mkdir -p ~/.docker/cli-plugins
ln -sfn /usr/local/opt/docker-compose/bin/docker-compose ~/.docker/cli-plugins/docker-compose
Docker CLIで利用する環境変数をevalでセットします。
echo 'eval $(minikube docker-env)' >> ~/.zshrc
source ~/.zshrc
シェル起動時に読み込まれるんじゃなくてお試しでやってみたい方は以下だけ打って下さい。
eval $(minikube docker-env)
k8sコンテナを利用しないのに起動しっぱなしになるので停止します。
minikube pause
これでセットアップは完了です!
試しにDockerコンテナ起動してみる
以下の記事で作ったプログラムで試してみます。
まず、Dockerfile or compose.yamlにVolume設定を記述していた場合、先にVMとマウントしてあげる必要があります。
# Dockerfileが存在するDirectoryまで移動して
minikube mount $PWD:$PWD
Current Directoryをマウントすることで、composeで起動した時にDockerに渡されるPathとマウント先のPathが一致するのでコンテナ内の/hogeにもマウントされるという仕組みです。
volumes:
- .:/hoge
mountが終わったらDockerコンテナを起動します。
# docker run -v ...
# OR
docker compose up -d
VMのIPを調べます。
minikube ip # => xxx.xxx.xxx.xxx
返ってきたIPを使ってホストマシン上からcurlを飛ばしてみます。
毎回IPを指定するのが面倒な場合はminikube起動時に以下のコマンドを使用してhostsに書き込んで下さい。
Macのhostsはmulti onなので、複数のIPが割り当てられていても名前解決してくれます。
(hostsは汚くなりますが ...)
echo "`minikube ip` local.docker" | sudo tee -a /etc/hosts
local.dockerにcurlを飛ばすと... 無事通りました!
あとがき
個人的にはインストールから動作確認まで非常に楽だったな〜という印象なのですが、皆さんは如何でしたでしょうか?
この記事が皆さんのお力になれれば幸いです ☆
採用PR
アプリケーションのコンテナ化・二次元コンテンツに興味がある、もしくはチャレンジしてみたいという方は是非一緒に働きましょう!