WSLとAlpineLinuxを利用してWindows上でDockerを動かす

# はじめに
Windows上でDockerを動かす場合はDockerDesktopとWSL2を組み合わせる手段が思い浮かぶと思います。
今回はその手段を利用せずにWindows上で稼働しているAlpineLinuxからDockerを動かしてみます。

# 背景
DockerDesktopは個人利用では無償で利用できますが、特定の条件に当てはまらない企業・団体に関しては有償となってしまった。DockerDesktopの有償化に関する詳しい話は割愛しますが、本手順はDockerDesktopを利用せずにWindows環境上でDockerを利用する手順の1つとしてご紹介いたします。

# 前提
必須：Windows10以上（エディションはpro）の環境及びインターネット環境

# 今回紹介する手順を実行した環境
エディション	Windows 11 Pro
バージョン	23H2
OS ビルド	22631.2861

# やってみよう
## 1.WSLのインストール
PowerShellを管理者権限で起動しましょう。

![powershell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/8233a4d9-4efa-d700-48cd-c4e111eb5c40.png)

次に以下のコマンドを入力して実行しましょう。
```powershell
wsl --install
```
コマンドを実行すると再起動を求められるので、PCを再起動します。
![powershell2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/bfe24549-1772-fce0-ded7-2299fc49b9c1.png)

## 2.AlpineLinuxのインストール
こちらの[ページ](https://www.alpinelinux.org/downloads/ "ページ")からAlpineLinuxをダウンロードします。
※今回はC:\workにファイルをダウンロードします。

Mini root filesystemのx86_64の最新版（2024年12月22に時点でalpine-minirootfs-3.21.0-x86_64.tar.gzが最新）をダウンロードしました。
![Alpine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/cdf28ae2-4209-e90b-1177-ffd8d269ea24.png)

次にAlpineのインポート先をのディレクトリを作成します。
今回は以下のパスでディレクトリを作成しました。

C:\wslDistroStorage\Alpine

先ほどダウンロードしたalpine-minirootfs-3.21.0-x86_64.tar.gzをインポートします。

PowerShellを管理者権限で起動しカレントディレクトリをC:\workへ移動します。

次に以下のコマンドを入力して実行しましょう。
```powershell
wsl --import Alpine C:\wslDistroStorage\Alpine .\alpine-minirootfs-3.21.0-x86_64.tar.gz
```

![powershell3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/f6454b8f-a0fa-4b4a-bea4-ebf4df792948.png)

以下のコマンドを入力してAlpineLinuxを実行しましょう。
```powershell
wsl -d Alpine
```

次の画像のようにAlpineLinuxが起動して実行できるようになります。
![powershell4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/d888b4d5-6be3-fa08-2e95-26cd9e9f7d5e.png)

まずはシステムの更新をしましょう。
以下のコマンドを実行してシステムの更新をします。

```shell
apk update
apk upgrade --no-cache
```
次の画像は前記のコマンドを実行した結果です。

![powershell5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/1a73947e-ca9f-fce9-6e20-b0cc39543ef0.png)

これでAlpineLinuxの下準備ができました。

## 3.Dockerを稼働させる
次にDockerを動かすために必要なパッケージや設定をAlpineLinuxに施していきます。

まずは必要なパッケージをインストールします。
※今回はdocker-composeも使えるようにします。

```shell
apk add --no-cache docker docker-compose openrc
```

次にネットワーク周りの下準備を行います。
※今回は通信ができればよしとするので細かいところは割愛します。
まずはHyper-Vを有効化します。
コントロールパネル -> プログラムと機能 -> WIndowsの機能の有効化または無効化
より機能を追加します。
追加後はPCを再起動しましょう。

![hyperv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/edf59f5b-68cf-b463-dc18-e57c2cac41ce.png)

コントロールパネル -> Windowsツール
からHyper-Vマネージャを開きます。

![hyperv2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/61873003-d2e7-5ca7-3252-50f75445830d.png)

仮想スイッチマネージャ -> WSL (Hyper-V firewall)
を選択します。このままだと外部との通信ができないので今回は
外部ネットワークを選択します。
![hyperv4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342210/66dc3cd1-7963-da67-ceb4-58163dd7106c.png)

PowerShellを管理者権限で起動し、以下のコマンドを入力してAlpineLinuxを実行しましょう。
```powershell
wsl -d Alpine
```

/etc/network/にinterfacesを作成します。
このファイルがないとdockerデーモンの起動でこけます。
ファイルに設定する値は私の環境では以下としました。
※addressやgatewayの値は各自の適切な値に置き換えてください。

```powershell
# /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
   address 192.168.1.100/24
   gateway 192.168.1.1
```
作成したinterfacesのファイル権限を以下のコマンドで設定します。
```shell
chmod 644 /etc/network/interfaces
```

次にdockerの自動起動を有効化します。
```shell
rc-update add docker boot
```
次のコマンドを実行してdockerデーモンを起動します。
```shell
openrc boot
```
以上でDockerを利用する準備が整いました。

```shell
docker run --rm hello-world
```
などを実行すればDockerが利用できるようになっていることが確認できるはずです。