Windows環境にUbuntu + Docker 環境を作るまで

# 概要
- Docker for WindowsではなくUbuntuにDockerを入れて使えるようにする:whale:
- 詰まりがちなところも解説

### 注意点
- 構築前にDokcer for Windowsがwindowsにインストールされている場合はアンインストールしてからの実行がおすすめ

---
# ubuntuインストール起動
### Windows環境でWSLを有効化にする
  - 管理者権限でPowerShellを起動し、下記のコマンドを入力
  
``` .sh
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

### Microsoft StoreからUbuntuをインストール
 - [ストアページ](https://www.microsoft.com/ja-jp/p/ubuntu/9nblggh4msv6?activetab=pivot:overviewtab)

### ubuntuを起動
 - 初回起動時に「ユーザー名」「パスワード」の設定を求められるので、適切に設定


---
# Dockerのインストール
Ubuntu上でコマンドを実行

### Dockerのパッケージをインストールする

``` .sh
sudo apt install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common
```

### Docker公式のGPGキーを取得して追加

``` .sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```

確認

``` .sh
sudo apt-key fingerprint 0EBFCD88
```

### インストール
マシン構成によって次のコマンドが若干違うため[こちら](https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository)を確認して実行
下記はx86_64の場合

``` x86_64.sh
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
```

### リポジトリの最適化
処理に時間がかかるので注意

``` .sh
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
```

### インストール確認
```
sudo docker --version
```

バージョン情報が出力されていればDokcerのインストールは完了

### (任意)dockerコマンドを使いやすくする
インストールした直後は`sudo`コマンドを入力しなければ`dokcer`が実行できない
下記コマンドを実行して`sudo`を入力しないで実行を行えるようにする

``` .sh
sudo usermod -aG docker $USER
```

### Dokcer立ち上げ
``` .sh
# 開始
sudo service docker start

# 停止
sudo service docker stop
```

開始後にdokcer ps などで立ち上がっていることを確認すると良い

### 注意点
Windowsの再起動などを行ったあとはDockerの立ち上げから必要なので注意
検索すると色んな人が自動起動のやり方説明してるので気になった人はやるといいかもしれない。


---
# Docker-composeのインストール
Ubuntu上でコマンドを実行
### インストール
公式からバージョン情報を確認してインストールしたいバージョンにコマンドを書き換えて実行
https://github.com/docker/compose/releases

``` .sh
sudo curl -L "https://github.com/docker/compose/releases/download/ここにバージョン/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

記載時の最新バージョンの場合は

``` 1.28.2.sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

上記コマンド実行後にこちらを実行してパスを通す

``` .sh
sudo chmod +x /usr/local/bin/docker-compose
```



### 注意点
下記コマンドでインストールした場合、バージョンが1.25.0になってしまうため注意

```
sudo apt install docker-compose
```

このコマンドでアンインストールしてから上記の方法で再インストールすると最新バージョンにできる

```
sudo apt remove docker-compose
```

### インストール確認
``` .sh
docker-compose --version
```

バージョン情報が出力されていればOK

---
# おわり:end:

これで構築は終わり。
Dokcerのコンテナ起動などは普段と同じように。
ふぁいと:bangbang:

---
# おまけ
この環境時 + Laravelで困ったことを記載する

## Laravel_logのPermissionError
```
/hogehoge/laravel/storage/logs/laravel-2021-02-14.log” could not be opened: failed to open stream: Permission denied
```
みたいなのが出た。
Ubuntu上でプロジェクトディレクトリまで移動し、権限を付与してあげると治る

``` .sh
sudo chmod -R 755 /hogehoge/laravel/storage/logs/
```

## docker.host.internalが使えない
`docker.host.internal`は`Docker for Windows`か`Dokcer for Mac`でしか使えない（記載時点では）
そのため、docker-compose.ymlに下記を追記して使えるようにしなければならない

```docker-compose.yml
app:(サービス名)
 {中略}
 extra_hosts:
 - "host.docker.internal:host-gateway"
```

docker-compose up -d --buildで構築し直すと動くようになる。
私はここでめちゃくちゃハマった

--- 
# ほんとに終わり
Ubuntu環境結構快適。
おいでよUbuntu+Dokcerの森