simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Windows Subsystem for Linux(WSL)で Docker を利用する

前書き

Docker for Windows 派なのですが、仮想化環境だったとしても Hyper-V が対応していない PC だったりして、結局 Docker for Windows や WSL2 が起動しないなんてことになってます。
AWS などで、お安いインスタンスを借りることで Linux 環境は整いますが、ローカルでお金をかけずに気軽にコンテナを確認したい時だってあるじゃないですか
そんな感じで、WSL x Docker でローカルに http サーバーの nginx のコンテナを起動して動作を見てみようと思います。

手順

WSL機能を有効にする

管理者権限で PowerShell を起動して

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

GUI で有効無効に切り替えることもできます。

f:id:simplestar_tech:20191014093520p:plain
プログラムの追加と削除から

WSLのパッケージをストアから導入

Microsoft Store から WSL について調べると、対象ページに案内されます

f:id:simplestar_tech:20191014093839p:plain
Microsoft Store
ここで Ubuntu を選んでインストール

管理者権限で Ubuntu を起動

いろいろ初回は聞かれるので、今までの手順含め詳細を学びたい初心者はこちらを読むといいかも
www.atmarkit.co.jp

Docker を WSL Ubuntu にインストール & 起動する

要約すると

sudo apt update
sudo apt upgrade -y
sudo apt install -y docker.io

docker が新しすぎるとダメなので戻す(この情報になかなか辿り着けなかった

戻せるバージョンを確認し

sudo apt show docker.io -a

Docker をわざと古くする

sudo apt remove docker.io
sudo apt -y install docker.io=17.12.1-0ubuntu1

Docker を起動する

sudo cgroupfs-mount && sudo service docker start

起動確認とか

sudo docker version

Client:
 Version:       17.12.1-ce
 API version:   1.35
 Go version:    go1.10.1
 Git commit:    7390fc6
 Built: Wed Apr 18 01:23:11 2018
 OS/Arch:       linux/amd64

Server:
 Engine:
  Version:      17.12.1-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.10.1
  Git commit:   7390fc6
  Built:        Wed Feb 28 17:46:05 2018
  OS/Arch:      linux/amd64
  Experimental: false

docker コマンドは頻繁に打つのでいちいち sudo つけないといけないのうざい人は docker グループに User を追加して対処します。

# dockerグループがなければ作る
sudo groupadd docker

# 現行ユーザをdockerグループに所属させる
sudo gpasswd -a $USER docker

# docker 再起動
sudo service docker restart

# いったん Ubuntu も管理者権限で起動しなおし
exit

参考:
Dockerコマンドをsudoなしで実行する方法 - Qiita

起動しなおしたら、再度 docker を立ち上げ

sudo cgroupfs-mount && sudo service docker start

起動確認

docker run --rm hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

これができなくてずっと調べて、試行錯誤してました。
2019の台風19号が上陸する日の朝のことです

nginx とか

localhost:8080 で Web サーバーが起動するように nginx コンテナを pull して起動する

docker run --name hogehoge -d -p 8080:80 nginx
  • d は デタッチ の略、ようはフォアグラウンドで居座らないようにするオプション
  • p はコンテナの外にポートフォワーディングということで、ホストマシンの 8080 ポートが、nginx コンテナの 80 ポートに接続される意味

もちろんホスト側で 8080 を誰かが使っていると怒られる
あとは docker の基礎を学ぶとだいたいクリアできると思います

結果確認
localhost:8080 と Chrome などの Web ブラウザの URL に記入する

f:id:simplestar_tech:20191014101428p:plain
Web サーバーが docker コンテナ in WSLで動いてる証拠

まとめ

docker が動けばいいんだよ
あとは docker だけの知識で頑張るから

追記

WSL は /mnt というディレクトリがあり、ここに C ドライブ, D ドライブなど、パソコンのハードディスクドライブがマウントされています。(mnt だけに)

:/mnt$ ls -la
total 0
drwxrwxrwx 1 owner owner  512 Oct 13 08:12 c
drwxrwxrwx 1 owner owner  4096 Oct 12 13:21 d

Windows のファイルを使って docker コンテナ起動したいんじゃー、みたいな時は、この /mnt ディレクトリを活用できそう