目的
Visual Studio Code(以降、VSCodeで記載)、WSL2を使用してDocker環境上に以下のコンテナを作成するために実施した内容を残しておきたいと思います。
Windows環境を汚さず、繰り返し構築可能なJava開発環境の構築を目指します。
※記事は2回に分け、今回は①として「WSL環境準備編」となります。
Java開発環境(全2回)の概要
- WSL2上のUbuntuにDockerを導入
- VSCodeのDevContainer機能を利用し、Dockerfileやdocker-compose.ymlによるコンテナ作成
- コンテナではSDKMANを導入(複数のJavaのバージョンを切り替え、Mavenを利用)
第1回「①WSL環境準備編」における記載範囲
- WSL2:LinuxディストリビューションとしてUbuntuを導入
- VSCodeからDevContainer機能を用いてディストリビューション(Ubuntu)にアクセス
1. 前提条件
- エディション:Windows10 Pro
- 環境構築時に使用したソフトウェアやバージョンは以下の通り。
# | os/software | version | 用途 |
---|---|---|---|
1 | Visual Studio Code | 1.93.0 | 統合開発環境(IDE)として利用 DevContainer機能を利用し、コンテナ構築 |
2 | WSL | 2 | ディストリビューションとしてUbuntuを導入 |
3 | Ubuntu | 22.04 | Dockerを導入し、Java開発環境を構築 |
4 | SDKMAN | script: 5.18.2 native: 0.4.6 |
JVMベース言語のバージョン管理ツールとして使用 |
5 | Java | 11.0.24-tem 17.0.12-tem 21.0.4-tem |
Java11、17、21を切り替えて使用 |
6 | Maven | 3.9.8 | Mavenプロジェクトの構築、ビルドで使用 |
- 構築する環境はproxyを使用するための設定をしていますが、全ての環境におけるベストプラクティスとは限りません。
各自で利用する環境に合わせて、proxy設定内容が適切かご確認の上ご参考にして頂ければと思います。
2. WSL2環境準備
2.1. WSLバージョン確認
※以下、バージョンを確認しておきます。
ver1でない場合、「2.2. WSLバージョンアップ」は読み飛ばし頂いて問題ありません。
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Stopped 1
2.2. WSLバージョンアップ
以下、手順 3~5を実施してWSL2にバージョンアップを行う。
手順 3: 仮想マシンの機能を有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする
PS C:\WINDOWS\system32> wsl.exe --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
手順 5 - WSL 2 を既定のバージョンとして設定する
wsl --set-default-version 2
注意事項
WSLバージョンが"2"であったとしても、「wsl --update」は1回は実行しておいた方が良いと思います。
(systemdコマンドが使えない状態でハマったこともあるため)
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
3. WSL2環境構築
3.1. Ubuntu22.04の導入
Microsoft Storeからダウンロードおよびインストール手順は、以下のサイトに分かりやすく記載されているため、そちらを参照ください。
Ubunt22.04
3.2. Dockerの導入
Dockerのインストールについては、以下コマンドを実行します。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
備忘として、参考にさせて頂いたDocker Docs公式サイトも記載しておきます。
[Docker Docs] Install Docker Engine on Ubuntu
Install using the convenience script
コマンド実行時のログ内容については、参考情報として以下に記載。
実行ログ
ubuntu@DESKTOP-BMGUJA8:~$ curl -fsSL https://get.docker.com -o get-docker.sh
ubuntu@DESKTOP-BMGUJA8:~$ sudo sh ./get-docker.sh
[sudo] password for ubuntu:
# Executing docker install script, commit: 6d9743e9656cc56f699a64800b098d5ea5a60020
WSL DETECTED: We recommend using Docker Desktop for Windows.
Please get Docker Desktop from https://www.docker.com/products/docker-desktop/
You may press Ctrl+C now to abort this script.
+ sleep 20
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c install -m 0755 -d /etc/apt/keyrings
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o /etc/apt/keyrings/docker.asc
+ sh -c chmod a+r /etc/apt/keyrings/docker.asc
+ sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
Version: 27.0.3
API version: 1.46
Go version: go1.21.11
Git commit: 7d4bcd8
Built: Sat Jun 29 00:02:33 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 27.0.3
API version: 1.46 (minimum version 1.24)
Go version: go1.21.11
Git commit: 662f78c
Built: Sat Jun 29 00:02:33 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.18
GitCommit: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
runc:
Version: 1.7.18
GitCommit: v1.1.13-0-g58aa920
docker-init:
Version: 0.19.0
GitCommit: de40ad0
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the 'Docker daemon attack surface'
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
4. VSCodeからディストリビューション(Ubuntu)にアクセス
4.1. WSLに接続
- VSCodeにて"><"を選択し、「Connect to WSL using Distro...を選択」を選択
- Fileから「Open Folder」を選択し、カレントディレクトリを選択
4.2. Dockerのバージョン確認
- Dockerがインストールできているか、バージョンを確認してみる。
Dockerバージョン確認コマンド
docker version
実行ログ
ubuntu@DESKTOP-BMGUJA8:~/project$ docker version
Client: Docker Engine - Community
Version: 27.0.3
API version: 1.46
Go version: go1.21.11
Git commit: 7d4bcd8
Built: Sat Jun 29 00:02:33 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 27.0.3
API version: 1.46 (minimum version 1.24)
Go version: go1.21.11
Git commit: 662f78c
Built: Sat Jun 29 00:02:33 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.18
GitCommit: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
runc:
Version: 1.7.18
GitCommit: v1.1.13-0-g58aa920
docker-init:
Version: 0.19.0
GitCommit: de40ad0
次回の予定
Dockerfile、docker-compose.ymlを作成し、Java開発環境を構築する記事を投稿予定。