Windows 10 Insider Preview のインストール
WSL2は、Build 18917以降で利用可能ですが、2019/06/29時点では正式リリースはされていません。Windows Insider Programへ参加して、Windows10 Insider Previewをインストールすることで、Build 18917以降(開発中のバージョン)を利用できるようになります。
PCの動作が不安定になる可能性もあるので(開発中のバージョンなので)、どうしても今すぐDockerが使いたいんだー!という人以外は、正式リリースを待った方がいいと思います。
Windows 10 Insider Preview の開始方法
Windows Subsystem for Linuxの有効化
Build番号の確認
PowerShellから下記コマンドでBuild 18917以降になっていることを確認します。
PS C:\> systeminfo ホスト名: DEV01 OS 名: Microsoft Windows 10 Home Insider Preview OS バージョン: 10.0.18922 N/A ビルド 18922
Windows Subsystem for Linuxの有効化
管理者としてPowerShellを開き、下記コマンドを実行後、Windowsを再起動します。
※Microsoft Storeからもインストールできますが、私はコマンドラインからの実行が好きです。
PS C:\> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Path : Online : True RestartNeeded : False
Windows Subsystem for Linuxの有効化
Ubuntuディストリビューションのインストール
管理者としてPowerShellを開き、下記コマンドを実行します。
# Ubuntuディストリビューション(18.04)のダウンロード PS C:\> Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing # Ubuntuディストリビューションのインストール PS C:\> .\Ubuntu.appx

インストール画面が起動後、ユーザ名とパスワードを入力するとUbuntuが起動します。
Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: user01 # ユーザ名を入力 Enter new UNIX password: # パスワードを入力 Retype new UNIX password: passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. user01@dev01:~$ exit # 抜ける
WSL2用に変換
PowerShellから下記コマンドを実行します。
PS C:\> wsl -l -v # WSLのバージョンを確認 NAME STATE VERSION * Ubuntu-18.04 Stopped 1 PS C:\> wsl --set-version Ubuntu-18.04 2 # UbuntuのディストリビューションをWSL2用に変換 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。 PS C:\> wsl -l -v # WSL2に変換されたことを確認 NAME STATE VERSION * Ubuntu-18.04 Stopped 2 PS C:\>
参考
Windows10 20H1で導入された「WSL2」を使用する方法
「WSL2」へのバージョンアップでLinux互換環境はどう変わるのか?
ssh設定
Ubuntu上での操作
WSL2でLinuxとの互換性を向上させたり、Visual Studio Codeなどの使い勝手のよいプロダクトを生み出したりと、個人的なMicrosoftの評価は上がっているのですが、なぜターミナルはキー操作でコピペすらできないクソのままなのでしょうか?不思議で仕方ないですが、今まで通り、Teratermからssh接続できるようにしていきます。
$ ssh -V # open-sshがインストールされていることを確認
OpenSSH_7.6p1 Ubuntu-4, OpenSSL 1.0.2n 7 Dec 2017
$ cd /etc/ssh # /etc/sshディレクトリへ移動
# rsaは強度が弱いので、現時点では楕円曲線暗号のecdsaがベター(ローカル環境なので使わないですけど..)
$ sudo ssh-keygen -t ecdsa -N '' -f ssh_host_ecdsa_key # keygenで秘密鍵、公開鍵を作成
Generating public/private ecdsa key pair.
Your identification has been saved in ssh_host_ecdsa_key.
Your public key has been saved in ssh_host_ecdsa_key.pub.
The key fingerprint is:
SHA256:19SWObm4YCiKrVMcMpWDcdSVNpwcrGRCYIt0+QKuweU root@dev01
The key's randomart image is:
+---[ECDSA 256]---+
| .+B=o =o+ |
|.+o== + O . + |
|+ =..= o . . B |
|.ooE... . o o o |
|.. +... S + o . |
|. oo. . o . . |
| ..o . |
| .. |
| .. |
+----[SHA256]-----+
$ ll
total 572
drwxr-xr-x 2 root root 4096 Jun 29 16:49 ./
drwxr-xr-x 87 root root 4096 Jun 29 16:31 ../
-rw-r--r-- 1 root root 553122 Feb 10 2018 moduli
-rw-r--r-- 1 root root 1580 Feb 10 2018 ssh_config
-rw------- 1 root root 227 Jun 29 16:49 ssh_host_ecdsa_key # 公開鍵が作成されていることを確認
-rw-r--r-- 1 root root 172 Jun 29 16:49 ssh_host_ecdsa_key.pub # 秘密鍵が作成されていることを確認
-rw-r--r-- 1 root root 338 Jul 26 2018 ssh_import_id
-rw-r--r-- 1 root root 3262 Jul 26 2018 sshd_config
# sshdの設定
$ sudo vi sshd_config
$ diff sshd_config.org sshd_config
19c19
< #HostKey /etc/ssh/ssh_host_ecdsa_key
---
> HostKey /etc/ssh/ssh_host_ecdsa_key # コメントを外す
56c56
< PasswordAuthentication no
---
> PasswordAuthentication yes # パスワード認証を許可
$ sudo service ssh restart
* Restarting OpenBSD Secure Shell server sshd [ OK ]
$ ssh localhost # ssh接続できることを確認
user01@localhost's password:
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.19.43-microsoft-standard x86_64)
:
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.XX netmask 255.255.255.0 broadcast 192.168.0.255 # IPアドレスを確認
Terateamから上記IPアドレスでssh接続
# sudoコマンド実施時、serviceコマンドについてはパスワード入力を省略できるよう追記
$ sudo visudo
:
# Allow sudo without a password
user01 ALL=(ALL) NOPASSWD: /usr/sbin/service
# ログイン時にsshが起動するよう追記
$ vi ~/.profile
:
# ssh start
if ! service ssh status > /dev/null 2>&1 ; then
sudo service ssh start > /dev/null 2>&1
fi
$ . ~/.profile # .profile読み込み
WSL1の時のようにlocalhostでアクセスできればよいのですが、上記URLに記載されている下記内容により、現時点ではWindows側と異なるIPアドレスを持つので、WSL2のIPアドレスを指定してssh接続する必要があります(面倒だけど、UbuntuでIPアドレスを都度確認する必要あり)。
WSL1では、Win32側とネットワークを共有していたため同じIPアドレスを持ち、localhostでWin32側へのアクセスができた。WSL2では、Win32側と異なるIPアドレスを持つだけでなく、WSL2からWin32側へアクセスする場合には、Win32側の仮想内部ネットワーク側のIPアドレスにアクセスする必要がある。Microsoftは、「これは一時的なもので、修正する優先順位リストの中で非常に高いもの」として対策中であるということだ。
下記で「apt update」を実行したところ、上手くいきませんでした。Windows側とIPアドレスが別になっていることで、外部にアクセスできなくなっているようです(ウィルス対策ソフトのFW設定を外してもダメでした)。WSL1に戻すと外部(インターネット)にアクセスできるので、パッケージのインストール等はWSL1で実施して、Dockerを使用するところで再度WSL2に変換しようと思います。
2019/08/04時点で、Microsoftによるネットワークの改良が完了しました。WSL2から外部へ接続できるようになったので「apt update」などのコマンドが使えるようになっています。WSL2でWebサーバを立ち上げたら、Windows側のブラウザで「http://localhost/」で確認できるようになったので、開発環境として利用するのにはもう問題はなさそうですね!
参考
Windows Subsystem for Linux 2におけるネットワークの改良
パッケージの全更新
$ sudo apt update # パッケージを管理しているDBを最新の状態に更新 $ sudo apt dist-upgrade # インストールされているパッケージを全更新。追加でパッケージが必要になった場合もインストールしてくれる $ sudo apt install build-essential # gcc, gdb ...などの開発ツールをインストール
Djangoインストール
とりあえずDjangoでプロダクトを作成したくなったのでインストール
# pyenvのインストール $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv # 環境設定ファイルを更新 $ vi ~/.bash_profile # 文末に下記を追記 : export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" # 環境設定ファイルの再読み込み $ source ~/.bash_profile # pyenvのアップデート $ git clone git://github.com/yyuu/pyenv-update.git ~/.pyenv/plugins/pyenv-update $ pyenv update # 必要なライブラリをインストール $ sudo apt install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev $ sudo apt install zlib1g-dev # pyenvでpython3.6.8をインストール $ pyenv install --list $ pyenv install 3.6.8 # python3.6.8をデフォルト設定に $ pyenv global 3.6.8 $ python --version $ pyenv versions system * 3.6.8 (set by /home/user01/.pyenv/version) # Pythonパッケージ管理ツールpipのインストール $ sudo apt install python-pip $ which pip /home/user01/.pyenv/shims/pip # pipアップデート $ pip install --upgrade pip $ pip --version pip 19.2.2 from /home/user01/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pip (python 3.6) # Djangoインストール $ pip install django $ python -m django --version 2.2.4 # mysqlclientインストール $ sudo apt install python-dev libmysqlclient-dev $ pip install mysqlclient $ django-admin startproject myapp # myappプロジェクトを作成 # settings.pyを修正 $ cd ./myapp/myapp $ diff settings.py.org settings.py 変更前: ALLOWED_HOSTS = [] 変更後: ALLOWED_HOSTS = ['*'] # どこからでもアクセスできるように $ cd ~/myapp $ python manage.py runserver # 上記でNGの場合 $ python manage.py runserver 0.0.0.0:8000
http://localhost:8000/でWebサーバにアクセス

MySQLインストール
DBも当然必要になってくるので、下記を参考にインストールします。管理者(root)パスワードは、インストール後に mysql_secure_installation コマンドを実行して設定するようになったようです。
また、mysqlではなくmariadbをインストールした方がよいでしょう。
$ sudo apt install mariadb-server mariadb-client
参考
【Ubuntu 18.04 LTS】MySQLサーバを動かす
Visual Studio Codeでコーディング
コマンドを叩くのはWSL2上のUbuntuでいいとしても、エディタはやっぱりvimよりもVSCodeを使いたい。下記を参照したところ、VSCodeからWSL2のUbuntuのファイルにアクセスできるようになりました!
参考
VSCodeをWSL2のUbuntuのエディターとして使用
※ 続きというか、本題のDockerについては、時間が取れ次第、、別途記載していきます(10月以降?)
