前書き
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 で有効無効に切り替えることもできます。
管理者権限で Ubuntu を起動
いろいろ初回は聞かれるので、今までの手順含め詳細を学びたい初心者はこちらを読むといいかも
www.atmarkit.co.jp
Docker を WSL Ubuntu にインストール & 起動する
Windows Subsystem for Linux 1 の Ubuntu に docker をインストールして動かせた
— Simplestar@Unityゲーム開発 (@lpcwstr) October 12, 2019
いくつもエラーでハマったのです
参考手順はこの二つ
インストールと起動手順https://t.co/7JVhWhnWsb
前バージョンdockerを入れる手順https://t.co/h6aggairVO
これなら Windows 10 Pro じゃなくてもいける? pic.twitter.com/nO9idZek9A
要約すると
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 の基礎を学ぶとだいたいクリアできると思います
まとめ
docker が動けばいいんだよ
あとは docker だけの知識で頑張るから