Windows

Windows Subsystem for Linux + Docker for Windows を使えるようにするまでメモ

参考 URL

Win10 で Windows Subsystem for Linux

  1. 「Windows 10 Fall Creators Update」の更新を充てる
  2. 管理者モードでPowerShellウィンドウを起動して以下のコマンドを実行する(実行後、再起動が要求されると解説されていたがされなかった)

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    
  3. 「Microsoft Store」から "Windows Subsystem for linux" で検索してディストリビューションを見つける

  4. ディストリビューションを「入手」でインストールする

  5. この 「Ubuntu」を起動すると実際の WSL へのインストールが行われ、Ubuntu のプロンプトウィンドウが起動する

    スクリーンショット 2018-01-25 10.13.24.png
    ユーザー名とパスワードを入力して、作業ユーザーを作成してセットアップ完了する

注意点

どうも「Windows 10 Fall Creators Update」をインストールすると、MS 謹製の sshd がインストールされ勝手に(Windows のサービスとして)起動する状態になる様なので注意。

殺しておかないと、VirtualBox や WSL 側の sshd に入れないのでハマる。

デフォルトでパスワード認証設定の様なのでセキュリティー的にも好ましくない。

Docker

Docker for Windows のインストール方法は省略する。

Ubuntu への Docker のインストール方法は公式のインストール方法を参照。

現時点では参考URL “Docker for Windowsで快適な環境を得るまでの そこそこ長い闘い - Qiita” の「Bash on WindowsでDockerのインストール」の内容と同じ。

古い Docker がインストール済みの場合削除しておく必要があるので注意

準備

apt パッケージインデックスの更新

$ sudo apt-get update

apt が HTTPS を通してパッケージをインストール出来るようにする

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Docker の公式 GPG キーを追加する

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

GPG キーの目視ベリファイ(DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

Docker の apt-get リポジトリを stable リポジトリとしてセットアップする

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Docker CE のインストール

aptのパッケージインデックスを更新する。( Docker の apt リポジトリをセットしたので)

$ sudo apt-get update

インストール

$ sudo apt-get install docker-ce

バージョンを指定する場合は以下のコマンドで利用可能なバージョンを確認して

$ apt-cache madison docker-ce

バージョン指定インストール

$ sudo apt-get install docker-ce=<VERSION>

Hellow World テスト

$ sudo docker run hello-world

→ この段階では動かない

Docker for Windows との協調設定

以下二項の設定を行う事により、 WSL 側 Docker クライアントが Win 側の Docker engine を使用する様になってくれる模様。

Ubuntu on WSL

~/.bashrc に以下を書き込んでおく

export DOCKER_HOST='tcp://0.0.0.0:2375'

Docker for Windows の設定

  • 「Settings」 の 「General」 で「Expose daemon on tcp://localhost:2375 without TLS」にチェックする
  • 「Shared Drives」で WSL にマウントするボリュームをチェックする

パーミッションの問題

WSL + Ubuntu では自動的に C ドライブを /mnt/c にマウントしてくれる。

etc/fstab などに記述されているわけではないので VirtualBox の自動マウントのような仕組みと思われる。

/mnt/c の制約

  • パーミッション・オーナーが root:root の 0777
  • パーミッション変更不可

Virtual Box + Ubuntu のボリュームマウントの制約と同じで意味が無い

じゃあどうするか

によれば普通に mount コマンドでマウントできると書かれているので、任意のディレクトリを任意のパーミッションでマウントできるかやってみる。

$ sudo mount -t drvfs -o uid=tettekete,gid=tettekete C:\Users\tettekete\wsl_share /mnt/wsl_share
mount: wrong fs type, bad option, bad superblock on C:\Users\tettekete\wsl_share,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

→ ディレクトリをマウントすることはできない(ドライブ単位でしか出来ない模様)

samba という選択

Win 側ディレクトリを好きなパーミッションでマウントできないなら WSL 側ディレクトリを共有すればいいじゃない、

と Samba の中の人も考えたらしい。

が、これ以上のキメラ環境は精神衛生上好ましくないのでおとなしく Docker for mac を使った方が良い気がする。