虚無ありき

うるせーーーしらねーーー

Remote Docker Daemon + VSCode Remote Container

tl;dr

  • socket とか tcp port で Remote で docker daemon を叩く際の諸々を実際にやってみる
  • Remote Server に対して、VSCode Remote Container をしたかったから、した
    • Host -> Remote Server -> Container

Environment

  • Host
  • Remote
    • Ubuntu 16.04.5 LTS
    • Docker 19.03.5

Remote Docker Daemon

Docker Daemon は起動時に -H Option を指定することで、好きな Unix Socket や TCP Port で listen することが出来る

Example:

# default
$ docker daemon -H /var/run/docker.sock &

# TCP で待ち受ける
$ docker daemon -H 0.0.0.0:5555 &
$ docker daemon -H 127.0.0.1:5555 &

# 両方で待ち受けることも出来る
$ docker daemon -H /var/run/docker.sock -H 127.0.0.1:5555 &

ちなみに Ubuntu 16.04 の Default は以下の様になっている

$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-01-31 10:51:01 JST; 2 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 1054 (dockerd)
    Tasks: 20
   Memory: 1.2G
      CPU: 30min 52.756s
   CGroup: /system.slice/docker.service
           └─1054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

これに対して Docker Client においても、-H Option でどの Docker Daemon に接続するか指定することが出来る

$ docker -H /var/run/docker.sock --version
$ docker -H tcp://127.0.0.1:5555 --version

そのため、TCP Port を外部に露出したり ssh PortForward を使うことで、Remote Server の Docker Daemon に Local から接続することが出来る

$ ssh -NL localhost:5555:/var/run/docker.sock user@host &
$ docker -H localhost:5555 --version
Docker version 19.03.5, build 633a0ea

VSCode Remote Container

Remote の Docker Daemon を触れる状態で、VSCode settings.json にて DockerHost を指定する

$ ssh -NL localhost:5555:/var/run/docker.sock user@host &

[Command] + P でコマンドパレットを起動し、settings と打ち込んで settings.json を開く

"docker.host": "tcp://localhost:5555" などと追記し、VSCode を再起動する

f:id:suecharo:20200217175538p:plain
Remote Container Settings

出来た。