Docker Desktopを使わない（代替）Dockerのインストール for Mac

# Docker Desktopの代替方法

Docker Desktopが有料化ということで、Docker Desktopが使えない場合、代替方法についてのメモ。

# Dockerの仕組み

普段使っているDocker=Docker Engineであり、Dockerデーモンによって構成されるクライアント・サーバーアプリケーションである。このDocker EngineはLinux上でしか対応していないので、MacやWindowsでは直接起動できない。そのためDoker Desktopで仮想環境を構築して、そこで起動している。
なので、仮想環境を用意すれば良いということ。
今回はVirtualBoxとDocker Machineを使って起動する。

# 前提

Docker Desktopがインストールされていない環境の前提です。
Docker DesktopをインストールするとDocker Engineとかも一緒にインストールされてしまっているので、この方法を実行するとうまくいかない可能性があります。
こちらの方法を実行する前にアンインストールすることを推奨します。

# 1. Homebrew

Homebrew使ってインストールしていくので、以下を参照してインストール。

https://brew.sh/index_ja

# 2. Dockerインストール

HomebrewでDocker（Docker Engine）をインストールします。
[caskのDocker](https://formulae.brew.sh/cask/docker#default)はDocker Desktopなので注意。

```sh:以下のコマンドでインストール
brew install docker
```

https://formulae.brew.sh/formula/docker#default


# 3. Docker Machineをインストール

Docker Machineは仮想マシン上にDocker Engineをインストールするツール。
これを使ってVirtulboxにDockerをインストールします。

```sh:以下のコマンドでインストール
brew install docker-machine
```

https://formulae.brew.sh/formula/docker-machine

# 4. ViutualBoxのインストール

仮想マシンを起動するためにViutualBoxをインストールします。
以下からインストールしてください。

https://www.virtualbox.org/wiki/Downloads

# 5. Docker Machineを使って仮想マシンを作成

準備ができたのでDocker Machineを使って仮想マシンを作成します。
まずは仮想マシンの一覧を見てみます。

```sh:仮想マシン一覧
docker-machine ls
```

```sh:結果
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
```

何も作成されていないのが確認できます。
仮想マシンの作成は以下のコマンドで作成します。

```sh:仮想マシンを作成
docker-machine create --driver virtualbox default
```

`default` は仮想マシンの名前になります。
既に `default` が存在している場合は別の名前にします。


作成後にもう一度 `ls` してみます。

```sh:仮想マシン一覧
$ docker-machine ls

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.12   
```

作成が確認できました。

# 6. 環境変数を設定

Dockerコマンドでコンテナを構築する前に、Dockerの接続先等の環境変数をセットする必要があります。
以下のコマンド実行で一括設定できます。

```sh:環境変数を設定
eval "$(docker-machine env default)"
```

```docker-machine env default``` で必要な環境変数がエクスポートされるので上記で簡単にセットできます。
仮想マシンの再起動やシェルの再起動で毎回実行が必要になります。
毎回の設定が面倒な場合以下のように`.zshrc`とかに記載しても良いかもしれないですね。

```sh:毎回実行面倒な人用
echo 'eval "$(docker-machine env default)"' >> ~/.zshrc
```

# 7. コンテナを起動してみる

これでおおよそ完了したのでコンテナを起動してみます。

```sh
docker pull swaggerapi/swagger-editor
docker run -d -p 8080:8080 swaggerapi/swagger-editor
```

swagger-editorを起動してみました。
確認してみましょう。
接続先は仮想マシンのIPを指定する必要があります。
以下のコマンドでわかります。

```sh:IPアドレスを確認
docker-machine ip default
```

```sh:結果
192.168.99.100
```

まあ、```docker-machine ls``` で表示されたURLのIPアドレスとと同じになると思います。
`http://192.168.99.100:8080` で接続すると確認できるかと思います。

![スクリーンショット 2021-09-17 11.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111111/84fa37b4-18d4-db0e-e59d-9d32051645e4.png)

# 8. localhostで接続したい

いちいちIPアドレス覚えておくのも調べるのも面倒なので、localhostで繋ぎたいと思ったはず。
そんなときはVirtualBoxのポートフォアーディング使いましょう。

VirtualBoxを開くとdefaultマシンがあるのでそちらの設定を表示。
![スクリーンショット 2021-09-17 11.16.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111111/eef9e4cf-502a-9961-3c6f-a4fea2fd677e.png)

”ネットワーク”の”アダプター１”で”高度”を開いて怪しいフォントの”ポートフォアーディング”を選択。
![スクリーンショット 2021-09-17 11.13.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111111/4118559d-36c0-7ca2-cb6f-0d334ae840d5.png)

ここにポート設定を添付の画像のように記載。
今回はlocalhost（127.0.0.1）の8080ポートを仮想マシンの8080ポートに転送する。
![スクリーンショット 2021-09-17 11.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111111/7e7d3a75-7387-bebf-6849-074364c92605.png)

これでOKをクリックすれば完了です。
`http://localhost:8080` いざ接続してみましょう。
![スクリーンショット 2021-09-17 11.22.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111111/3e022bd3-0488-f4f5-fc7e-71e5c086798d.png)

成功しました！

# 9. 仮想マシンの起動とか停止

しばらく使用しない場合や都度都度実行＆停止したい時は以下を仮想マシンを停止します。
仮想マシンを停止したい場合は以下を実行します。

```sh:停止
docker-machine stop default
```

起動は以下。

```sh:起動
docker-machine start default
```


# おわり

上記でだいたいできるとは思っています。
まあ、Docker Desktop利用できる人はそのままDocker Desktop使った方が簡単であるし、Docker応援するためにお金は払った方が良い。

# 参考

https://docs.docker.jp/machine/overview.html