はじめに
普段の仕事では Windows を使っていますが、Linux も併用したいときに便利なのが WSL(Windows Subsystem for Linux)です。ここでは、その WSL 上で Docker Engine を直接動かせるか検証してみます。
注:この記事は WSL1 の時代(2019 年)の内容です。現在は WSL2 + Docker Desktop の組み合わせが標準的で、はるかに簡単に動かせます。当時の記録としてお読みください。
検証環境
事前準備
WSL の有効化
管理者権限の PowerShell で以下を実行し、再起動します。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
# 参考: https://docs.microsoft.com/ja-jp/windows/wsl/install
Ubuntu 16.04 のインストール
Microsoft Store から Ubuntu 16.04 LTS を入手して起動します。
初期セットアップ
初回起動時に UNIX ユーザー名とパスワードを作成します。作成後、sudo をパスワードなしで使えるようにしておくと、以降の作業が楽になります。
sudo visudo
# 最後に以下の行を追加
gekal ALL=(ALL) NOPASSWD:ALL
Docker のインストール
当時、最新版の Docker は WSL1 上で正常に動作しなかったため、あえて安定して動く 17.09 を指定してインストールします。
# システム更新
sudo apt update
sudo apt upgrade
# Docker 17.09 を取得してインストール
curl -O https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.0~ce-0~debian_amd64.deb
sudo dpkg -i docker-ce_17.09.0\~ce-0\~debian_amd64.deb
# 現在のユーザーを docker グループに追加(sudo なしで docker を使うため)
sudo usermod -aG docker $USER
# cgroup をマウントして Docker を起動
sudo cgroupfs-mount
sudo service docker start
動作確認
Apache(httpd)のコンテナを起動して、ブラウザからアクセスできるか確認します。
docker run -p 8080:80 --rm httpd
ブラウザで http://localhost:8080/ を開き、"It works!" が表示されれば成功です。
プロキシ設定
社内環境などプロキシ経由の場合は、Docker のデフォルト設定にプロキシを指定します。
# /etc/default/docker
export http_proxy="http://username:passwd@proxyserver:8080"
export https_proxy="http://username:passwd@proxyserver:8080"