計算用のDocker Engineサーバーを別の場所に用意して,リビングのソファーでリラックスしながら、MacOSやWindowsのノートパソコンでDokerを操作したいと思ったので,方法をまとめます.
以下ではDocker Engineを実行するリモートサーバーと,Docker Clientを実行するローカルマシンを用意してDockerを使えるようにします.
Docker Engineサーバーを用意
それなりのスペックのPCでUbuntu Serverを用意して,Docker daemonを実行します.詳細は別の記事で紹介しています.
Ubuntu Serverにrootless Dockerをインストールする - みーのぺーじ
ホスト名の設定とmDNSの有効化
IPアドレスを管理するのは面倒なので,ホスト名でアクセスできるようにします.まずはホスト名を設定します.
$ hostnamectl set-hostname mt-server $ hostname mt-server
mDNSを有効にします.avahiをインストールしてサービスを有効にします.
sudo apt install avahi-daemon
systemctl status avahi-daemon
ホスト名でアクセスできるようになったか確認して完了です.
% ping mt-server.local 2 packets transmitted, 2 packets received, 0.0% packet loss
公開鍵暗号方式でSSHにログイン
環境変数DOCKER_HOST
を利用する場合,DockerはSSHにログインするパスワードの入力に対応していないので,公開鍵暗号方式でログインする設定にします.
MacOS
~/.zshrc
に以下の内容を追加して,環境変数DOCKER_HOST
を登録します.
DOCKER_HOST=ssh://mt@192.168.1.4
以下のコマンドは,mt
という名前のMacOS上のユーザーで鍵を生成して,それをIPアドレス192.168.1.4のUbuntu Serverにコピーするコマンドです.
% ssh-keygen -t ecdsa ... Your identification has been saved in /Users/mt/.ssh/id_ecdsa Your public key has been saved in /Users/mt/.ssh/id_ecdsa.pub ... % ssh-copy-id -i ~/.ssh/id_ecdsa.pub mt@192.168.1.4 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/mt/.ssh/id_ecdsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ... Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'mt@192.168.1.4'" and check to make sure that only the key(s) you wanted were added.
ssh-copy-idとは,sshを使用してリモートマシンにログインして,指定した鍵でログインできるよう~/.ssh
などを自動で書き換える,便利なスクリプトです*1.
sshでホスト名とユーザー名のみでログインしてみて,パスワードを要求されなければ完了です.
Windows
環境変数の編集画面を開いて,以下の内容を追加します.
DOCKER_HOST=ssh://mt@192.168.1.4
PATH=<dockerコマンドのディレクトリ>
Windowsにはssh-copy-id
に相当するコマンドはなさそうなので,PowerShellで以下のコマンドを実行します*2.
cat $env:USERPROFILE/.ssh/id_rsa.pub | ssh mt@192.168.1.4 "umask 077; test -d .ssh || mkdir .ssh ; cat >> ./.ssh/authorized_keys || exit 1"
sshでホスト名とユーザー名のみでログインしてみて,パスワードを要求されなければ完了です.
Docker CLIをインストール
以下のウェブサイトからダウンロードします.
GitHub - docker/cli: The Docker CLI
/user/local/bin/などに移動して実行できるようにすれば,Docker CLIが使えるようになります.
% docker version Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? Client: Cloud integration: v1.0.22 Version: 20.10.13 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 10 14:08:44 2022 OS/Arch: darwin/amd64 Context: default Experimental: true
Docker Contextを使用する
リモートサーバーにアクセスする設定を毎回行うのは面倒です.Dockerにはこのような設定をまとめるcontextという機能があるので,利用します.
Docker Context | Docker Documentation
初回だけ新規にcontextを作成します.
% docker context create remote --docker "host=ssh://mt@mt-server.local" remote
編集するならばupdate,一覧表示するならlsを実行します.
% docker context update remote --docker "host=ssh://mt@mt-server.local" % docker context ls
contextを使用するにはuseを実行します
% docker context use remote remote
これでリモートマシンでDockerを使えるようになりました. docker version
を実行すると以下のようになり,Docker Clientはdarwin/amd64,Docker Engineはlinux/amd64と別々のマシンで実行できていることが分かります.
% docker version Client: Cloud integration: v1.0.22 Version: 20.10.13 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 10 14:08:44 2022 OS/Arch: darwin/amd64 Context: remote Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.12 API version: 1.41 (minimum version 1.12) Go version: go1.16.12 Git commit: 459d0df Built: Mon Dec 13 11:46:12 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.4.12 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc: Version: 1.0.2 GitCommit: v1.0.2-0-g52b36a2d docker-init: Version: 0.19.0 GitCommit: de40ad0