Dockerのインストール(Windows版)

# 初めに
Windows版のDockerのインストール方法についてまとめます。

インストールするにあたりシステム要件を確認してください。

https://matsuand.github.io/docs.docker.jp.onthefly/desktop/windows/install/#system-requirements

システム要件に関する記事も記載していますんのでよろしければご覧ください。

https://qiita.com/T-H9703EnAc/items/2ba6c20ae5d882729bee

|手順No|方法|
|---|---|
|手順1|[WSL2のインストール](#手順1wsl2のインストール)|
|手順2|[Dockerのダウンロード](#手順2dockerのダウンロード)|
|手順3|[Dockerのインストール](#手順3dockerのインストール)|
|手順4|[DockerでJavaの開発環境を構築してみる](#手順4dockerでjavaの開発環境を構築してみる)|


# 手順1:WSL2のインストール
__※事前にWindows Upadateを最新化しておいてください。__
WSL2のインストールは以下の公式サイトに沿ってい行っていきます。

https://docs.microsoft.com/ja-jp/windows/wsl/install



「__管理者権限__」で「__PowerShell__」を起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/dec4d0b5-b5a0-4d49-9911-759e0ac489e7.png)
## PowerShellの管理者権限の起動の仕方1
「Windowsロゴキー + R」を入力して「__powershell__」と入力して、Enterを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/a307179a-d602-1da7-407b-a37cbb4e19aa.png)
「__PowerShell__」上で以下のコマンドを実行してください。管理者権限用のPowerShellが起動します。
```:管理者権限起動コマンド
Start-Process PowerShell.exe -Verb runas
```
## PowerShellの管理者権限の起動の仕方2
スタートメニューで、「__Windwos Power Shell__」と検索して、「__管理者として実行する__」で起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/52bd8142-2dcb-bafe-90ef-488dcaad063b.png)


管理者権限で起動したら、以下のコマンドを実行してください。
```:実行コマンド
wsl --install
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/ae73571a-93e2-00a8-0220-9dd0ceb6ecb6.png)
インストールが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/f0d5471d-34ca-d623-b2ff-3393268d80dd.png)
PowerShellでのインストールは完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/c5bf8e68-f49a-70cb-88ba-77cf9406f0cc.png)
パソコンの再起動を行ってください。
パソコンの再起動後、再度インストールが行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/ea9f4d99-d7bd-d4ae-981f-fc9dc4c5952d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/c1a56912-f60d-9fb1-abd7-d924c23328a5.png)

インストールが完了したら、ユーザ名とパスワードを任意のものを設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/490dad93-3974-a2ab-4e02-8d4877f11d2b.png)

```:ユーザ名とパスワードの設定
Enter new UNIX username:任意のユーザ名
New password:任意のパスワード
Retype new password:New passwordと同じ
```
設定が完了すると以下の成功メッセージが表示されます。
```
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)
...省略
The list of available updates is more than a week old.
To check for new updates run: sudo apt update


This message is shown once once a day. To disable it please create the
/home/任意のユーザ名/.hushlogin file.
```
これで、WSL2のインストールは完了です。

# 手順2:Dockerのダウンロード
以下から、「__Docker Desktop on Windows__」をダウンロードします。

https://docs.docker.com/desktop/install/windows-install/

上記をクリックすると以下の画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/a171d4c4-6606-f685-cac9-3dc6bf7f36be.png)
「__Docker Desktop for Windows__ 」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/e7a3c0bc-911b-88e5-6217-aa31c1c96edc.png)
「__Docker Desktop for Windows__ 」のクリックと同時に「__Docker Desktop Installer.exe__」がダウンロードされます。（※数分かかります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/97ec66d4-7494-78c5-5874-fbb80d4cb875.png)
# 手順3:Dockerのインストール
手順2でダウンロードしたインストーラを起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/20df453e-4e06-72f3-6e02-b421ba493373.png)
「__OK__」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/8eeca323-3fb4-fd47-c1c2-43368c116cc3.png)
インストールが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/69ab1023-ff32-fb06-6186-298f98c7f062.png)
インストールの完了です。「__Close and log out__」をクリックしてください。再起動が行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/4dfdd76b-07b3-3487-c862-9d86771da29c.png)

再起動後Dockerが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/f1922e0b-6ec4-5533-9338-dff5d136fa8b.png)

「__I accept the terms__」にチェックを入れて、「__Accept__」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/56b66810-558c-d1a1-6680-ada252c59032.png)

Docekr Desktopが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/2e67f706-b0c6-a67d-8958-979d3346051b.png)
「__×__」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/697f532d-62bb-552b-4272-a52ffcbb7eb2.png)
「__Skip tutorial__」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/958ed1a0-064b-1a99-1538-c7d97307f325.png)
以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/3ff4095d-1d3f-dbec-3da5-bfdb2dbbc2eb.png)

これで、Dockerのインストールは完了です。

# 手順4:DockerでJavaの開発環境を構築してみる
以前、Docker、Gradleを使用したJavaの開発環境の構築についてという記事を記載したのでこれに沿って行っていきます。

https://qiita.com/T-H9703EnAc/items/002538a2b040fc188705

任意の場所にJavaのプロジェクト作成する場所を用意してください。(本記事では、__/home/"ユーザ名"/java__ に作成することを想定します。)

最低限のファイル・フォルダ構成を用意する以下のバッチをJavaのプロジェクト作成する場所(本記事では、__/home/"ユーザ名"/java__)に作成してください。
例えば、Ubuntuを起動して対象のディレクトリ(__/home/"ユーザ名"/java__)にVSCodeを起動(__code .__)して作成できます。
```:init.sh
#!/bin/bash
echo -n "任意のプロジェクト名を入力してください:"

read PROJECTNAME

mkdir $PROJECTNAME

touch $PROJECTNAME/Dockerfile

touch $PROJECTNAME/docker-compose.yml

#devcontainer関連を作成
mkdir $PROJECTNAME/.devcontainer

touch $PROJECTNAME/.devcontainer/devcontainer.json

mkdir $PROJECTNAME/src
```
以下のコマンドで作成したshを実行してください。
```:シェルの起動コマンド
sudo sh init.sh
```
プロジェクト名を「__docker_java__」とします。
```
任意のプロジェクト名を入力してください:docker_java
```
このままだとファイルの編集ができないので以下のコマンドで作成したプロジェクトにフル権限を設定します。
```:権限の設定
sudo chmod -R 777 docker_java
```
Windowsだとshの実行だとVSCodeの起動でエラーになってしまったので手動で起動してください。
```:VSCode起動コマンド
cd docker_java
code .
```
「__Dockerfile__」を以下のようにしてください。(コピペでOK)
```:Dockerfile
FROM adoptopenjdk/openjdk11

RUN apt-get update
RUN apt-get -y install curl
RUN apt-get -y install zip
RUN curl -s "https://get.sdkman.io" | bash
RUN echo ". $HOME/.sdkman/bin/sdkman-init.sh; sdk install gradle" | bash
WORKDIR /java_project/
```
「__docker-compose.yml__」を以下のようにしてください。(コピペでOK)
```:docker-compose.yml
version: '3.6'
services:
  java:
    container_name: java
    build: ./
    tty: true
    volumes:
      - ./src:/java_project/
```
「__devcontainer.json__」を以下のようにしてください。(コピペでOK)
```:devcontainer.json
{
    "name": "java_gradle",
    "workspaceFolder": "/java_project",
    "dockerComposeFile": "../docker-compose.yml",
    "settings": { 
        "terminal.integrated.defaultProfile.linux": "/bin/bash",        
    },
    "service": "java", //attachするコンテナはjavaを指定
    "extensions": [
        "vscjava.vscode-java-pack", // JavaExtensionPack
        "gabrielbb.vscode-lombok" //Lombok Annotations Support For VS Code
    ]
}
```
VSCodeに以下の拡張機能をインストールしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/b80cbf3c-c40a-7464-e638-5a2d84a572d0.png)

「__Dockerイメージの作成__」コマンドを実行してください。
※sudoを付けないとPermission Denied(権限なし)でエラーになります。パスワードはWSL2インストール時に設定したものです。
```:Dockerイメージの作成コマンド
sudo docker-compose build
```
以下のようになれば成功です。
```:成功
Building java
[+] Building 692.9s (11/11) FINISHED
...省略
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
```
以下のようなメッセージが出て、「__Dockerイメージの作成__」ができない場合は一度Docker自体を再起動してください。
```:エラー
The command 'docker-compose' could not be found in this WSL 2 distro.   
We recommend to activate the WSL integration in Docker Desktop settings.

For details about using Docker Desktop with WSL 2, visit:

https://docs.docker.com/go/wsl2/
```
停止再起動の方法です。
以下のDockerアイコンで「__右クリック__」をしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/cd14951a-fb96-3d63-d3f2-02686e72b718.png)
「__Quit Docker Desktop__」をクリックして、停止できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/268369d8-63d0-265f-db94-10c5baf7586d.png)
ショートカットを実行するとDockerが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/a631ffbd-9245-d7c5-65a0-f5a468fa91e6.png)

「__コンテナの作成__」コマンドを実行してください。
※sudoを付けないとPermission Denied(権限なし)でエラーになります。パスワードはWSL2インストール時に設定したものです。
```:Dockerイメージの作成コマンド
sudo docker-compose up -d
```
以下のようになれば成功です。
```:成功
Creating network "docker_java_default" with the default driver
Creating java ... done
```
コンテナ内に入ります。
```:コンテナ内に入るコマンド
sudo docker exec -it java /bin/bash
```
Javaバージョン確認コマンドを実行してJavaがインストールされてか確認します。以下のコマンドを実行してください。
```:Javaバージョン確認コマンド
java -veriosn
```
以下のようになれば成功です。
```:成功
openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment Temurin-11.0.16+8 (build 11.0.16+8)
OpenJDK 64-Bit Server VM Temurin-11.0.16+8 (build 11.0.16+8, mixed mode)
```
Gradleバージョン確認コマンドを実行してGradleがインストールされてか確認します。以下のコマンドを実行してください。
```:Gradleバージョン確認コマンド
gradle -v
```
以下のようになれば成功です。
```:成功
Welcome to Gradle 7.5!

Here are the highlights of this release:
 - Support for Java 18
 - Support for building with Groovy 4
 - Much more responsive continuous builds
 - Improved diagnostics for dependency resolution

For more details see https://docs.gradle.org/7.5/release-notes.html


------------------------------------------------------------
Gradle 7.5
------------------------------------------------------------

Build time:   2022-07-14 12:48:15 UTC
Revision:     c7db7b958189ad2b0c1472b6fe663e6d654a5103

Kotlin:       1.6.21
Groovy:       3.0.10
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          11.0.16 (Eclipse Adoptium 11.0.16+8)
OS:           Linux 5.10.16.3-microsoft-standard-WSL2 amd64
```
Javaのプロジェクトを作成します。以下のコマンドを実行してください。
```:プロジェクト作成コマンド
gradle init
```
以下のように選択してください。以下のようになれば成功です。
```:成功
Welcome to Gradle 7.5!

Here are the highlights of this release:
 - Support for Java 18
 - Support for building with Groovy 4
 - Much more responsive continuous builds
 - Improved diagnostics for dependency resolution

For more details see https://docs.gradle.org/7.5/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

Split functionality across multiple subprojects?:
  1: no - only one application project
  2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 1

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] no
Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 1

Project name (default: java_project): app
Source package (default: app): 

> Task :init
Get more help with your project: https://docs.gradle.org/7.5/samples/sample_building_java_applications.html
```
以下のコマンドを実行してプログラムが実行されるか確認しましょう。
```:実行コマンド
./gradlew run
```
「__Hello World!__」が表示されれば成功です。
```:成功
Downloading https://services.gradle.org/distributions/gradle-7.5-bin.zip
...........10%............20%...........30%............40%...........50%............60%...........70%............80%...........90%............100%

> Task :app:run
Hello World!

BUILD SUCCESSFUL in 5m 51s
2 actionable tasks: 2 executed
```
デバッグできるか確認しましょう。
VSCodeの左下にある「__><__」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/113b594d-600a-30eb-1fb8-e3ce4187f01a.png)
「__Reopen in Container Remote-Containers__」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/e5a5e6d6-7e31-d4b1-6d21-2ff17523d141.png)
以下のように表示されればコンテナ内入ることは成功です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/d22553d3-7243-b568-007f-55206d7f5077.png)

Remote Container上の拡張機能は以下のものをインストールされていることを確認してください。もしなければ手動でインストールしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/a8eaa077-f4df-9bd1-0130-35853b385bc8.png)
「__Java Build Status__」が以下のようになるか確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/6067aff9-0d89-ac67-b727-b306666c96d0.png)
上記のようになるとメインメソッドの上あたりに「__Run|Debug__」が表示されるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/6693500c-0e75-dd42-62b5-8615f5c92c8b.png)
任意の場所にブレイクポイントを張って「__Debug__」で実行した際にきるか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/a6017f26-95b7-cc1d-0a81-96e508a785ba.png)
上記のようにブレイクポイントのところで止まれば成功です。

# 最後に
ここまで見ていただきありがとうございます。最後にこの記事を投稿するにあたり自身の少し古いWindowsのパソコンにそれぞれインストールしていたのですが「__システム要件__」が合っていなかったので動作がかなり遅かったです・・・。みなさんは何かをインストールする際にご自身のパソコンのスペックとシステム要件の確認を忘れないようにしてください。一応Dcokerのシステム要件に関する記事も記載していますのでよろしければご覧ください。

https://qiita.com/T-H9703EnAc/items/2ba6c20ae5d882729bee