Docker をWindows 10 Home 上 の ubuntu on WSL で使う

ubuntu のバージョンは18.04を使います。

cat /etc/lsb-release
# DISTRIB_ID=Ubuntu
# DISTRIB_RELEASE=18.04
# DISTRIB_CODENAME=bionic
# DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"

以下の順に見ていきます。

  1. リモートの設定
  2. ubuntu on WSL 上の設定
  3. hello-world

1. リモートの設定

Windows 10 Home では Docker for Windows をインストールして使うことができないので、この代わりに外部の VPS を借りて、そこの Docker を使います。

今回は Amazon EC2 を借りました。

cat /etc/os-release
# NAME="Amazon Linux"
# VERSION="2"
# ID="amzn"
# ID_LIKE="centos rhel fedora"
# VERSION_ID="2"
# PRETTY_NAME="Amazon Linux 2"
# ANSI_COLOR="0;33"
# CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
# HOME_URL="https://amazonlinux.com/"
# [ec2-user@ip-172-31-18-243 ~]$ cat /etc/os-release
# NAME="Amazon Linux"
# VERSION="2"
# ID="amzn"
# ID_LIKE="centos rhel fedora"
# VERSION_ID="2"
# ID="amzn"
# ID_LIKE="centos rhel fedora"
# VERSION_ID="2"
# PRETTY_NAME="Amazon Linux 2"
# ANSI_COLOR="0;33"
# CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
# HOME_URL="https://amazonlinux.com/"

リモートのマシンに Docker が入っているかは以下で分かります。

docker -v
# Docker version 19.03.6-ce, build 369ce74

Docker version ...と出なかった場合は以下のコマンドで入れられます。

sudo yum update -y
sudo amazon-linux-extras install docker
sudo usermod -a -G docker "$(whoami)"
sudo service docker start

docker -v
# Docker version 19.03.6-ce, build 369ce74

2. ubuntu on WSL 上の設定

リモートに鍵でsshできるようにする話はここでは省略します。

例えばリモートは以下のような情報で接続できるとします。

  1. ホストはn.n.n.n
  2. ユーザー名はec2-user
  3. 鍵は~/.ssh/id_rsaを使う

ここにssh docker-hostコマンドで接続できるようにしたい場合、~/.ssh/configに以下を追記します。

Host docker-host
    Hostname n.n.n.n
    User ec2-user
    IdentityFile 

ただ、これだけの設定だとリモートに接続するだけで、先程 Docker をインストールした意味がないので、設定にもう1行加えて以下のようにします。

Host docker-host
    Hostname n.n.n.n
    User ec2-user
    IdentityFile
    LocalForward 127.0.0.1:12312 /var/run/docker.sock

このLocalForwardの設定のおかげで、ssh docker-hostしている間localhost:12312へのアクセスがリモートの/var/run/docker.sockに転送されるようになります。

Docker がlocalhost:12312を使うようにするにはDOCKER_HOST環境変数を設定してあげます。

export DOCKER_HOST='localhost:12312'

そういえば、ubuntu on WSL にも Docker を入れてあげる必要があったので以下でインストールします。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker "$(whoami)"

Docker Compose が必要なら以下も実行します。

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

3. hello-world

以下が ubuntu on WSL から実行できれば完了です。

docker run hello-world
# Hello from Docker!