WSL2にDockerをインストールする方法

はじめに


WSL2環境であれば、Docker Desktop for Windowsが使えますが、ここではWSL2のUbuntu内にDockerをインストールする手順を記載しています。

手順


ほぼこの通りにやれば構築できます。

# WSLのUbuntuに入る
wsl -d Ubuntu
# 前準備
apt-get update
apt-get remove docker docker-engine docker.io containerd runc
apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# Dockerのリポジトリを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
# Dockerインストール
apt-get install docker-ce docker-ce-cli containerd.io
# Docker起動
service docker start
# 動作確認
docker run hello-world

参考


Install Docker Engine on Ubuntu

WSL2 – WSL起動時にsshdを起動する方法

はじめに


WSLに固定IPを割り当てたり、サービスを自動起動する方法を調べましたが、どうも通常の方法ではできないようす。

そんな時、この記事を見つけました。目からうろこ。

WSLのコマンドで、OSに対しコマンドを渡すことができるらしいです。

wslのヘルプ

wsl --help
・・・
Linux バイナリを実行するための引数:
・・・
    --
        残りのコマンド ラインをそのまま渡します。
・・・

実行方法


以下のコマンドを記述したバッチファイルでWSL起動時にSSHを起動します。

@echo off
wsl -d kali-linux -- service ssh start

参考

https://qiita.com/nashi2603/items/d0645305b137017b91b0

補足

静的IPを割当てる方法を色々試しましたが、ダメでした。

以下のようにすれば静的IPの割り当てはできるのですが、PCを再起動するとWSLのスイッチのIPが変更されてしまうためです。

@echo off
rem IPアドレスの変更だとうまくいかないので、追加している
wsl -d kali-linux -- ifconfig eth0 add 172.28.56.100 netmask 255.255.240.0 broadcast 172.28.63.255

WSLのスイッチのIPアドレス

PC再起動後

WSL2 – スナップショットを取る方法

方法1:ディストリビューションをエクスポート


こちらの手順でディストリビューションをエクスポートする

方法2:ディストリビューションが格納されているフォルダを複製


方法1で、エクスポートしたディストリビューションをインポートして使っている場合は、ディストリビューションが格納されているフォルダを複製すればよい。

補足:WSLの実体を移動したい場合


方法1のエクスポート/インポートを実施すればよい。

WSL2 – インターネットに接続する方法

wsl がインターネットに接続できない場合、以下の手順でインターネットに接続します。

設定手順

PCのWSLのネットワークに割り当てられているDNSサーバーを確認

ipconfig /all

イーサネット アダプター vEthernet (WSL):

・・・(省略)・・・
   接続固有の DNS サフィックス . . . . .:
   DNS サーバー. . . . . . . . . . . . .: fec0:0:0:ffff::1%1
                                          fec0:0:0:ffff::2%1
                                          fec0:0:0:ffff::3%1
・・・(省略)・・・

wslにログインし、resolv.conf を編集する

$ ls -l resolv.conf
  lrwxrwxrwx 1 root root 29 Jan 19 09:19 resolv.conf -> ../run/resolvconf/resolv.conf
$ sudo rm resolv.conf
$ sudo vi /etc/resolv.conf
# 追加
nameserver 8.8.8.8 # googleのネームサーバー
nameserver fec0:0:0:ffff::1%1 # PCのDNSサーバー

wsl.conf を編集する

$ sudo vi /etc/wsl.conf
# 追加
[network]
generateResolvConf = false

wsl をシャットダウンして入りなおす

 PCのコマンドプロンプトで以下を実行

wsl --shutdown
wsl -d <ディストロ名> -u <ユーザー名>

WSL2 – 1つのディストリビューションから複数のインスタンスを作成する方法

はじめに

 wsl を Microsoft Store からインストールすると、1つのディストリビューションに対し、1つのインスタンスしか利用できません。

色々試したかったり、復旧方法が分からないくらい環境が壊れてしまった時に再インストールしなければならないなど、ちょっと不便です。

それなので、1つのディストリビューションで複数のインスタンスが利用できたら便利ですね。今回はその方法を記載します。

複数インスタンス作成手順

ディストリビューション確認

wsl -l

エクスポート

wsl –export <ディストリ名> <エクスポート先のファイルパス>

wsl --export Ubuntu "C:\apps\wsl\export\ubuntu.tar"

インポート

wsl.exe –import <ディストリ名> <インストール先のフォルダパス> <インポートするファイルパス>

wsl --import Ubuntu01 "C:\apps\wsl\ubuntu01" "C:\apps\wsl\export\ubuntu.tar"

インポート結果確認

wsl -l

インスタンス起動

wsl -d Ubuntu01

Microsoft Store 経由でインストールしたディストリビューションが不要であれば、スタートメニュー→ディストリビューション右クリック→アンインストールで削除する。

参考

https://gist.github.com/stevemcilwain/24cae8d70d174c2160f06efe9fa38194

hosts.allow, hosts.denyについて

評価の順番


  1. /etc/hosts.allow が評価される
  2. /etc/hosts.deny が評価される
  3. 上記に一致しないものはすべて許可される

設定内容が反映されるタイミング


設定ファイルが保存されたと同時に設定が有効になる。何かを再起動したりする必要は無い。

注意点


ファイルの最後は必ず改行で終わること

OK

# ファイルの末尾
sshd: 192.168.1.100
[EOF]

NG

# ファイルの末尾
sshd: 192.168.1.100[EOF]

IPアドレス設定方法

# IPアドレス個別指定
sshd: 192.168.1.100 192.168.2.101
# グループ指定 : 192.168.1.0~192.168.1.255が有効
sshd: 192.168.1.
# サブネットマスク指定 : 192.168.1.0~192.168.1.255が有効
sshd: 192.168.1.0/255.255.255.0

設定例

sshに対しIPアドレス制限をする


/etc/hosts.allow

sshd: 192.168.1.0/255.255.255.0

/etc/hosts.deny

sshd: ALL

sshのみ特定のIPアドレス接続許可(ほかのサービスは接続禁止)


/etc/hosts.allow

sshd: 192.168.1.100

/etc/hosts.deny

ALL: ALL