カテゴリー
Microsoft

WSL の Docker (Linux) から Docker for Windows を利用できるようにする手順

はじめに

  • WSL でインストールした Linux 用の Dokcer はうまく動かない、らしい。
  • WSL に Linux 用の Docker をインストールするがクライアント用 (接続用) として利用し、実際に動かすのは Docker for Windows とするとうまくいく、らしい。

とのことで、やってみました。お手本のページは次です。

作業の流れ

  1. Docker for Windows をインストールしておく
    1. Docker for Windows の設定を変更する
  2. WSL に Docker (Linux) をインストールする
  3. WSL での Docker 接続先設定を変更する
  4. WSL に Docker Compose をインストールする
  5. WSL に Docker Compose のコマンド補完をインストールする

実践 1. Docker for Windows をインストールしておく

すでにインストール済みでした。

Docker for Windows の設定を変更する

  1. タスクバーの Docker アイコンを右クリック > Settings
  2. General > "Expose daemon on tcp://localhost:2375 without TLS" にチェック

TLS なしに、 tcp://localhost:2375 でデーモンをさらす、要するに tcp://localhost:2375 を経由することで Docker for Windows にアクセスできるようにする、セキュリティはちょっと落ちるよね、という設定と理解しています。

General  data-recalc-dims= "Expose daemon on tcp://localhost:2375 without TLS" にチェック” class=”wp-image-11439″/>

実践 2. WSL に Docker (Linux) をインストールする

WSL (Ubuntu) での作業です。

次の、 Linux 向けの Docker インストール方法を実践するだけです。

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
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
sudo apt-get install docker-ce docker-ce-cli containerd.io

もしここで、Docker を使おうとすると次のようにエラーとなりました。

この場合、 WSL にインストールした Docker を使おうとして失敗しています。

$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
$ sudo systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate.
$ export DOCKER_HOST=tcp://localhost:2375

実践 3. WSL での Docker 接続先設定を変更する

export DOCKER_HOST=tcp://localhost:2375

を実行することで、 docker コマンドの接続先が、 WSL ではなく、 Docker for Windows となります。

これで WSL から Docker を使えるようになりますけれども、注意するべき点があります。

それは、 sudo をつけないで docker を実行する ということです。

sudo をつけると、おそらく WSL の Docker を使おうとし、失敗しました。

$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
$
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

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

設定を永続化するために、 ~/.bashrc へ追記し、読み込みます。

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc

実践 4. WSL に Docker Compose をインストールする

これも、公式ドキュメント通りに実践すれば OK です。

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

実践 5. WSL に Docker Compose のコマンド補完をインストールする

これも、公式ドキュメント通りにインストールしました。

# bash completion が使えることが前提とのことなので brew でインストール
brew install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

以上で、 Docker だけでなく、 Docker Compose も使えるようになりました♪

おわりに

Git Bash で開発環境を整備してきました。けれども、限界を感じます。

WSL も使えるようになったほうがよいな、、、と思い始めてみました。

今回の Docker については、いずれ不要になる手順とおもいますけれども、しばらくは使うと思いますので、ノートいたしました。

以上です。

コメントを残す