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月以降?)