別サーバー上にあるDockerにイメージをデプロイしたりコンテナを起動したりの操作をしたい時

export DOCKER_HOST=192.168.1.100

とやったりすることで別サーバー上にあるDockerを操作できたりとかできるんですが既に推奨されておらず実際にやると警告が出たりする

じゃあどうやるのかと。docker contextを使えとのこと

contextを登録

docker context create \
    --docker host=ssh://192.168.1.100 \
    --description="remote sevrer" \
    my-remote-server

でcontextを作る。もちろんsshって書いてるのでSSH Serverが必要

登録したcontextを使用するように設定

docker context use my-remote-server

これでdocker infoとかやると別サーバー上のDockerが使用されているかを確認。ちなみに元に戻す場合は

docker context use default

でオッケーっぽい

参考: https://docs.docker.com/engine/security/protect-access

ちなみに

Dockerのsystemdで

[Service]
ExecStart=/usr/bin/dockerd -H "tcp://192.168.1.100:2375" -H fd:// --containerd=/run/containerd/containerd.sock

みたいに-HオプションつければDocker Daemonのポート開けれる

追記

https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket

TLS接続もできるので上記サイト通りに証明書生成してサーバー側のdockerd起動オプションの書き換えを設定したら問題なくTLS接続できる模様。その際Docker Contextを作ってやる場合

docker context create \
    --docker "host=tcp://192.168.1.100:2376,ca=/path/to/.docker/ca.pem,cert=/path/to/.docker/cert.pem,key=/path/to/.docker/key.pem" \
    my-remote-server

やって作らないといけないっぽい?