【初めてのDocker】インストール・ビルドの構築手順含めエラー3件の解決方法も解説！（Mac M1チップ）

# 環境
* Mac
    * 機種ID：MacBookPro18,3
    * macOS：Monterey
    * チップ：　Apple M1 Pro
    * メモリ：　16GB
* Dockerとは：オープンソースのコンテナ型の仮想化技術のプラットフォーム

※環境構築において、M1チップ固有の設定が色々ある模様。ネットにも記事がたくさんみられます。
　今回発生したエラーがそれに該当するかはまだ分からないですが、あくまで私の場合、という見地で書いています。
　どなたかの一助になればと思います。

# 前提
* 会社で既に存在しているプログラム（pythonで実装されている）を、自分のローカル環境でも利用したい。
* Homebrewを利用してインストールする。

# Docker構築手順

## Dockerインストール
* `brew install docker`を実施したところ、無事にインストール完了。
    * `docker --version`で`Docker version 20.10.21, build baeda1f82a`と表示確認。
    * `which docker　`で　`/opt/homebrew/bin/docker　`と表示確認。
    * `docker run -d -p 80:80 docker/getting-started`で起動確認。
    * `docker run hello-world　`で　公式のhello-worldコンテナを実行。 `docker ps -a`で確認完了。
    
## Docker Composeインストール
* Docker composeコマンドのインストールのために以下を実行
 
```terminal
sudo curl -L https://github.com/docker/compose/releases/download/2.12.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```

## 【エラー①】docker-compose -v でcommand not found　原因と解決策は...
* `/usr/local/bin/docker-compose`にあること確認
* `docker-compose -v　`でcommand not foundエラーを確認。
    * パスが通っていないと考えてbashrcでパス追加したが、同様のコマンドエラーが発生。
    * なぜだろうと思ったら、コマンド自体に問題があった。今は、docker composeを使うんですね。docker-composeのままの記事が多いため注意必要ですね汗

## 【エラー②】ERROR [internal] load metadata for　原因と解決策は...
* `docker compose build`実行したところ、新たなエラーメッセージが表示された

```terminal
[+] Building 1.6s (3/3) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 32B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => ERROR [internal] load metadata for docker.io/library/python:3.6        1.5s
------
 > [internal] load metadata for docker.io/library/python:3.6:
------
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: rpc error: code = Unknown desc = error getting credentials - err: docker-credential-desktop resolves to executable in current directory (./docker-credential-desktop), out: ``
```

* エラー対応のため、ネット記事を参考にDocker Engineをいじってみたが、解決せず（後で元に戻した）
    * buildkitをfalseにする
    * "insecure-registries": ["docker.io"],
    * 参考：[Dockerビルドエラー解決! | ERROR [internal] load metadata for …](https://shiimanblog.com/engineering/error-internal-load-metadata/)など
* 以下記事を参考に、`docker pull python 3.6`を実施してからbuildしたところ、無事に進行開始。
    * コンテナイメージのダウンロードが必要だから？だそう。
    * [【Docker Desktop】Macにインストール【Monterey/M1】](https://chigusa-web.com/blog/docker-desktop-mac/)
* `docker images`結果で該当のコンテナイメージを確認。



## 【エラー③】error getting credentials - err:　原因と解決策は...

*  `docker compose up -d`　を実行したところ、また、新たなるエラーが表示された。

```terminal
[+] Running 0/0
 ⠋ phpmyadmin Pulling                                                                                                                                                                                                                                                      0.0s
 ⠋ mysql Pulling                                                                                                                                                                                                                                                           0.0s
 ⠋ management-server Pulling                                                                                                                                                                                                                                               0.0s
error getting credentials - err: docker-credential-desktop resolves to executable in current directory (./docker-credential-desktop), out: ``
```


* 以下サイトの解決策を参考に、Docker Hubアカウントを作成してLoginを試みるが、以下メッセージ（上記とほぼ同様）が確認された
    * [[WSL2] Docker Desktopバージョンアップ後、イメージのpullに失敗する](https://kawadev.net/error-wsl2-docker-desktop-pull/)
   

```terminal
Error saving credentials: error storing credentials - err: docker-credential-desktop resolves to executable in current directory (./docker-credential-desktop), out: ``
```

* 上記サイトの解決策を参考に、`vi ~/.docker/config.json`で以下を対応。
    * `　"credsStore": "desktop"　`から、`　"credStore": "desktop"　`に変更
    * この　"credStore"については、多くの記事で対応策として記載がありますが、なぜこうすると解決するのかは誰にもわからない模様...どなたか知っていたら教えてください^^
    * [DOCKER COMMUNITY FORUMS](https://forums.docker.com/t/docker-credential-desktop-exe-executable-file-not-found-in-path-using-wsl2/100225)では、この対応策のことが「golden answer」と書いてあります笑
    
* `docker compose up -d`をしたところ成功。
* `docker compose ps`でもimageを確認
* なぜ`　"credStore": "desktop"　`でうまくいったのかわかる方がいらっしゃたら、ぜひ教えてください！!!

# 備忘録
* brewインストールする前に、ブラウザからMac用（M1チップ対応）のインストーラーをダウンロードしてDocker Desktopをインストールしたが、`docker --version`で反応なしだった。Rosetta2のインストールが関係ある？
    * [M1チップ対応！DockerをMacにインストールする方法](https://amateur-engineer.com/docker-mac-m1/)
* Homebrew Caskという拡張版もあるようで、これは全て終わってから発見したもの。今回発生したエラーたちとは関係あるのだろうか...?
    * [MacにHomebrewでDockerをインストールする](https://blog.interstellar.co.jp/2022/03/14/installing-docker-on-a-mac-with-homebrew/)