helloworlds

not a noun, it's a verb

【Windows】WSLからDocker for Windowsを操作する設定メモ

今回は、仮想環境のちょっとした記事です。

Windows10で、Dockerをインストールしたのはいいけど、

Windowsコマンドプロンプトの操作から脱出したかったのがきっかけでした。(別にWindowsが嫌いとかではもちろんなく、ただ使い慣れた環境操作が良かった!笑)

なので、Windows標準で使用できるWindows Subsystem for Linux (WSL)で、

WindowsにインストールしたDockerを操作できるようにしたメモ記事です!

細かい個々のツールに関しては解説はしません。 不具合があった際は、適宜ヴァージョンなどを確認してみてください!

では、さっそく。

環境

  • Windows10 : version 1903
  • Docker (Windows側: 19.03.5, WSL側: 18.09.7)
  • docker-compose (Windows側: 1.25.2, WSL側: 1.25.3)
  • WSL(Ubuntu) : 18.04
  • apt: 1.6.10

Windows

Dockerをインストールしていく

まずは、公式からDockerをインストールします。

※インストールには、Dockerのアカウントが必要かもしれません。

手順通りインストールすれば問題ないでしょう。

docs.docker.com

インストールが完了したら、コマンドプロンプトを立ち上げて、以下を実行してみます。

> docker -v
Docker version 19.03.5, build 633a0ea

> docker-compose -v
docker-compose version 1.25.2, build 698e2846

ヴァージョンが表示されればおkです。

試しにhello-world(docker run hello-world)もやってみたくなりますが、わたしは敢えてスキップしました。

別に今やってもいいのですが、あとでWSLからdocker ps -a でコンテナがあるか確認します。 特に意味はないのですが、WSLにもWindowsにもコンテナが今はないほうがスッキリするだけです笑

プロキシの設定をする

社内環境などで使用する場合、プロキシの設定をしないとDockerが外へ出ることができません。

なので、もし必要な場合が設定をしましょう。

  1. タスクバーにあるDockerをクリック
  2. Settings
  3. Resources-> PROXIES
  4. 環境に合わせてプロキシサーバーのURLを入力 (ex.. hoge.proxy.co.jp:8080)
  5. 入力したら、"Apply&Restart"

Cドライブをマウント

こちらもDockerのSettingsから確認できます。

  1. タスクバーにあるDockerをクリック
  2. Settings
  3. Resources-> FIRE SHARING
  4. "C" にチェック
  5. 入力したら、"Apply&Restart"

WSLからDocker for Windowsのデーモンを呼び出す設定

こちらもDockerのSettingsから確認できます。

  1. タスクバーにあるDockerをクリック
  2. Settings
  3. General
  4. "Expose daemon on tcp://localhost:2375 without TLS" にチェック
  5. 入力したら、"Apply&Restart"

WSL側

WSLを立ち上げて設定やらインストールやらしていきます。

.bashrc

.bashrcに以下を追記します。

DOCKER_HOST=tcp://localhost:2375

もし、.bashrcを今回新規作成していたら、.bash_profileに以下を追記します。

if [[ -f ~/.bashrc ]] ; then
    . ~/.bashrc
fi

プロキシ

もしプロキシサーバーがあれば、以下を設定していきます。

aptの設定

もしapt.confというファイルがなければ作成します。

$ sudo vim /etc/apt/apt.conf

# 以下を追記 (ドメインのところはご自身のものに編集)
Acquire::http::Proxy "http://hoge.foo.com:8080";
Acquire::http::Proxy "https://hoge.foo.com:8080";

curlの設定

ホームディレクトリに.curlrcファイルを作成し、編集する。

$ vim .curlrc

# 以下を追記 (ドメインのところはご自身のものに編集)
proxy = http://hoge.proxy.co.jp:8080

Dockerのインストール

今回のわたしの環境は、Ubuntuです。

公式にUbuntuへのDockerのインストールがあるので、参考にします。

Get Docker Engine - Community for Ubuntu | Docker Documentation

公式に手順があるので、ここではざっくりとした手順のみ記述します。

# アップデート
$ sudo apt-get update

# aptがHTTPS経由でリポジトリを使用できるようにする
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

# Dockerの公式GPGキーを追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# フィンガープリントを確認
$ sudo apt-key fingerprint 0EBFCD88

# リポジトリの設定
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

# 再度アップデート
$ sudo apt-get update
  • GPGキーとは?

GPG(GNU Privacy Gard)とは、暗号化・復号化のツールのキー。Dockerのパッケージを復号化するために使用します。

  • add-apt-repository

aptのリポジトリというものがあります。リポジトリは複数あり、リポジトリを設定することでそのリポジトリからパッケージをインストールすることができます。 今回の設定では、Dockerをインストールするために、stableを選択しました。

続いて、Dockerをインストールしていきますが、

わたしがインストールしていくとき、公式のコマンドでエラーが出てしまいました。

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

docker-ceがどうしてもインストールできませんでした。docker-ceは、コミュニティヴァージョン(無償)です。

まだ、きちんと確認できてはいないのですが、エラーをみるとdocker.ioをインストールしろとのこと。

ここで疑問が浮かび上がりました。

docker-ceとdocker.ioの違いとは?

先程も書いたとおり、docker-ceは世間一般で言うDockerのことらしい。

docker-eeは有償版らしい。

docker.ioUbuntuがメンテナンスしているパッケージのことらしい。

What is the difference between docker-engine and docker.io packages? - Quora

インストール(docker.io)

つまり、エラーのとおり、UbuntuでDockerをインストールしたい場合は、パッケージ名としてdocker.ioを指定するといいのかもしれない。

$ sudo apt-get install docker.io

docker-composeをインストール

docker-composeをインストールする。

docs.docker.com

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

# 確認
$ docker-compose -v

WSLの再起動

WSLを再起動をします。

これをしないとうまく設定が反映されないと思うので、実行します。

このコマンドは、PC自体を再起動しなくとも、WSLのみ再起動させることができるので、便利です!

WSLのウィンドウを閉じるだけでは、再起動していることにならないので、注意してください!

> net stop LxssManager
> net start LxssManager

確認

確認の方法はどうでもいいと思うのですが、この記事の冒頭で書いたとおり、

Windows側のコマンドプロンプト> docker run hello-world をして、hello-worldのイメージとコンテナが作成されるはずです。

Dockerの簡単なコマンドです。

# コンテナを全て表示
$ docker ps -a

# 稼働中のコンテナを表示
$ docker ps

# イメージを表示
$ docker images

runさせたら、Windowsコマンドプロンプトでコンテナを確認します。

次は、WSLの方で、Windows側で作成されたコンテナとイメージが確認できるかdocker ps -a を叩いて確認してみましょう。

無事、コンテナが確認できたらおkです!!

以上.