問題提起
「Docker Desktop for Windows...いらなくね?」
Linuxマシンで開発を行っているとき、開発環境は全てDockerコンテナで整えていた。
コンテナやイメージ、ボリューム、ネットワークの管理は全てdocker
コマンドから行っていて、特に不自由を感じなかった。
むしろLinuxの方がコンテナの起動が速くて快適。
Windows11のニューマシンを手に入れて、いざ開発環境を整えようと時に思ったのが冒頭である。
わざわざGit for WindowsとかDocker Desktop for Windowsとかmsys2とかをmsi
でインストールするのは面倒だし、アップデート管理も大変である。
まあ色々言いたいことはあるが、とにかく開発する上で欲しいのはLinux環境。 でも手元にはWindowsマシン。 そこでWSL2を使おうと決意したのであった。
下準備
- WSLの有効化
- BIOS/OSレベルの仮想化の有効化
Windowsにある程度精通していればやり方はすぐわかる。 (Google it♡)
Ubuntuをインストール
wsl
コマンドの確認
$ wsl --help
入手できるディストリビューションを確認。
$ wsl --list --online インストールできる有効なディストリビューションの一覧を次に示します。 'wsl --install -d <Distro>' を使用してインストールします。 NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling openSUSE-42 openSUSE Leap 42 SLES-12 SUSE Linux Enterprise Server v12 Ubuntu-16.04 Ubuntu 16.04 LTS Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu 20.04 LTS
をインストール。
$ wsl --install -d Ubuntu-20.04
このディストリビューションをDocker専用にするためusername
をdocker
にして進める。
パスワードを設定すればWSLが利用できるようになる。
いろいろ設定
面倒なのでsudo
のパスワード要求を切っておく。
$ sudo visudo - %sudo ALL=(ALL:ALL) ALL + %sudo ALL=(ALL:ALL) NOPASSWD: ALL
全てのパッケージを更新する。
$ sudo apt update
$ sudo apt upgrade -y
デフォルトのユーザをdocker
に。
$ sudo nano /etc/wsl.conf + [user] + default=docker
bash
起動時にdockerd
が動くようにしておく。
$ nano ~/.bashrc + sudo service docker start > /dev/null
Dockerのインストール
docs.docker.com (accessed on 2022/01/17)
必要があればdocker-compose
も。
$ sudo apt install -y docker-compose
一度ディストリビューションを落としてから再度WSL内へ。
$ exit $ wsl --terminate Ubuntu-20.04 $ wsl -d Ubuntu-20.04
docker
の確認。
$ docker --version Docker version 20.10.12, build e91ed57 $ docker images # dockerdが起動していなければエラーが返る REPOSITORY TAG IMAGE ID CREATED SIZE
新たなディストリビューションとしてインポート
作成したディストリビューションをtar
ファイルとしてエクスポートする。
$ wsl --export Ubuntu-20.04 docker.tar.gz
カレントディレクトリに仮想ディスクを作るようにインポートする。
$ wsl --import Docker . docker.tar.gz --version 2 $ wsl -d Docker
問題がないようであればUbuntu-20.04
を削除する。
$ wsl --unregister Ubuntu-20.04
これでWSL2上で開発する準備が整った。
ディスクを圧迫してきたらdiskpart
で圧縮する。
$ diskpart DISKPART> select vdisk file=path/to/ext4.vhdx DISKPART> attach vdisk readonly DISKPART> compact vdisk DISKPART> detach vdisk DISKPART> exit
オプショナル
ホストのssh
をWSLから叩けるようにする。
$ sudo mv /usr/bin/ssh /usr/bin/ssh.original # 元々のsshをリネーム $ sudo ln -s `which ssh.exe` /usr/bin/ssh
ついでにWSLにもssh
接続できるようにする。
$ sudo service ssh start