公開日:2022.03.22

出荷状態の windows から wsl2 + Ubuntu + docker-ce の環境を整う

テクログserver

wsl2 & Ubuntu の導入

Windows 10 バージョン 2004 以降 (ビルド 19041 以降) または Windows 11

管理者の PowerShell で

wsl --install

もしくは

wsl --install -d Ubuntu

をたたくと、必要なオプション コンポーネントの有効化、最新 Linux カーネルのダウンロード、WSL 2 の既定としての設定、および Linux ディストリビューションのインストールが実行されます。

これは最強すぎる。僕が環境を作ったときはまだこんな All-In-One の便利コマンドがありませんでした。こちら個人的に 0 から試していないです。

以前のバージョン

同じく管理者の PowerShell で

# Linux 用 Windows サブシステムオプション機能の有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestar化

再起動

# 仮想マシン プラットフォームオプション機能の有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

再起動

x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージをダウンロードして実行。

Powershell (管理者でなくてよい)で

# WSL 2 に設定
wsl --set-default-version 2

Microsoft Store で Ubuntu 20.04 LTS を入手。

正常に導入できた場合は

wsl -l -v

  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

が表示される(スターはこのディストリビューションが選択されていることを意味する)。

Ubuntu の設定と docker のインストール

Ubuntu の初回起動

初回の起動はユーザー名とパスワードを設定する必要がある。これは今後の実行ユーザーとなります。僕の場合は dev というユーザーを作りました。

以降 Windows Terminal で Ubuntu を扱います。

Ubuntu の設定

まずは先に wsl.conf を作成します。

sudo vim /etc/wsl.conf

https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config

で詳しく書かれていますが、この中で例としてあげられているサンプル wsl.conf ファイルを少し変えて載せます。

# Automatically mount Windows drive when the distribution is launched
[automount]

# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true

# Sets the directory where fixed drives will be automatically mounted. 
root = /mnt/

# DrvFs-specific options can be specified.  
options = "metadata,uid=1000,gid=1000,umask=022,fmask=11,case=off"

# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
mountFsTab = true

# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]

generateHosts = false
generateResolvConf = false

# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false

# Set the user when launching a distribution with WSL.
[user]
default = dev

# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start

windows の c ドライブなどは /mnt/ 配下にマウントされますが、間違って rm 走らせると c ドライブまるまる消えるのでご注意を👿。

最後の command の設定は windows 11 からですので、会社の PC のだとできないです、残念。後で代替の方法を記します。

一度 powershell で wsl –shutdown して再度 Ubuntu 立ち上げます。

今度は /etc/resolv.conf を設定します。

sudo vim /etc/resolv.conf

シンボリックリンクが残っている場合は

sudo rm /etc/resolv.conf
sudo vim /etc/resolv.conf

で以下を保存

nameserver 8.8.8.8

これで Google Public DNS で名前解決できるようになりました。

docker-ce をインストール

まず現状の Ubuntu 内のパッケージを最新状態にする。

sudo apt update
sudo apt upgrade -y

次に https 経由のリポジトリに必要なパッケージをインストール

sudo apt install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Docker’s official GPG key を追加

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

安定版の docker バージョンを取得

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

docker-ce をインストール

sudo apt install docker-ce docker-ce-cli containerd.io

sudo なしで docker コマンド使えるようにする

sudo usermod -aG docker $USER

docker compose をインストール

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}

mkdir -p $DOCKER_CONFIG/cli-plugins

curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

実行権限を与える

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

docker を Ubuntu 立ち上げ時に起動するようにする

windows 11 の場合は上の wsl.conf の設定だけですみますが、そうでない場合は、~/.bashrc の末尾に

if test $(service docker status | awk '{print $4}') = 'not'; then #停止状態
        sudo /usr/sbin/service docker start #起動
fi

を記述すればよい。

あとは作業フォルダーを /home/ 配下に置けば、サイトの表示速度が速くなるはず。

Git の設定

git は Ubuntu にすでにインストールされていますので、config とキーを置いていきます。

config は自分の場合は ~/.ssh/config を自動的に読み込まず、/etc/ssh/ssh_config が読み込まれていましたので、

ssh_config に今までの config の内容を記述します。

ここで注意する必要があるのは、Linux だとキーなどのパスの指定がバックスラッシュではなく普通のスラッシュです。

キーは ~/.ssh 配下に置きました。.ssh の権限を 700 、キーの権限を 400 にします。

vscode の対応

vim で開発するのは大変なので、やはり vscode を使いたい!

Extension の Remote Development もしくは Remote – WSL だけでもいいのでインストール。 Remote Development は Remote -WSL を包含しています。

すると vscode が直接 wsl 内を読むようになります。Git Lens や Git Graph も Install in WSL でリモート状態で使えるようになります。

その他

Ubuntu を少しおしゃれにしたい人は Oh My Posh 入れてもいい。僕は入れてます。

wsl を使ってて少し不便と感じたところ

  • Linux の tab の補完機能が powershell ほど使いやすくない

ただサイトの表示速度は体感的に早くなりましたし、docker や git のレスポンスがめちゃくちゃ早い。

この記事を書いた人

CHO

入社年2020年

出身地北京

業務内容開発

特技または趣味ギター、旅

CHOの記事一覧へ

テクログに関する記事一覧