はじめに
この実験では、Docker Desktop 内でmodel-runnerコマンドを使用して Docker Model Runner の設定を管理する方法を学びます。デフォルトの TCP ポートで Docker デーモンがリッスンするように有効化する方法、カスタム TCP ポートでリッスンするように設定する方法、そして Docker Model Runner の TCP 接続を無効化する方法について説明します。
実践的な手順を通じて、Docker デーモン設定ファイル (daemon.json) を修正してデーモンがリッスンするネットワークインターフェースを制御し、変更を適用するために Docker サービスを再起動します。また、リモートアクセスとセキュリティのために TCP 接続を有効化または無効化することの影響について理解します。
デフォルト TCP ポートで Docker Model Runner を有効化
このステップでは、Docker デーモンがデフォルトの TCP ポートで接続をリッスンするように有効化する方法を学びます。デフォルトでは、Docker デーモンは Unix ソケット経由で通信します。これはローカルアクセスにとってより安全です。しかし、リモートアクセスや特定のユースケースでは、TCP を有効化する必要がある場合があります。
Docker デーモンが TCP ポートでリッスンするようにするには、設定ファイルを修正する必要があります。Docker の主要な設定ファイルは通常/etc/docker/daemon.jsonにあります。このファイルが存在しない場合は作成できます。
まず、daemon.jsonファイルが存在するか確認しましょう。lsコマンドを使用します。
ls /etc/docker/daemon.json
ファイルが存在する場合、コマンドはそのパスを出力します。存在しない場合は、ファイルまたはディレクトリが見つからないというエラーメッセージが表示されます。
次に、nanoエディタを使用して/etc/docker/daemon.jsonファイルを編集または作成します。hostsキーを追加または修正して、TCP アドレスとポートを含めます。Docker のデフォルト TCP ポートは 2375(暗号化なし)または 2376(TLS 暗号化)です。このステップでは、簡略化のため暗号化なしのポート 2375 を使用します。
nanoでファイルを開きます:
sudo nano /etc/docker/daemon.json
ファイルが空または存在しなかった場合、以下の内容を追加します。ファイルに既に内容があった場合は、hostsキーを追加または修正して"tcp://0.0.0.0:2375"を含めます。unix:///var/run/docker.sockエントリは、デーモンがデフォルトの Unix ソケットでもリッスンし続けることを保証します。
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
内容を追加または修正した後、Ctrl + Xを押し、Yで確認し、Enterでファイル名に書き込むことで保存します。
変更を有効にするには、Docker サービスを再起動する必要があります。systemctlコマンドを使用して行います。
sudo systemctl restart docker
Docker サービスを再起動した後、ssコマンドを使用してリッスンしているソケットを確認することで、TCP ポートでリッスンしていることを検証できます。ポート 2375 でリッスンしているプロセスを探します。
sudo ss -tuln | grep 2375
Docker デーモンがポート 2375 で正常にリッスンしている場合、そのポートでリッスンしているプロセスを示す以下のような出力が表示されます:
tcp LISTEN 0 4096 0.0.0.0:2375 0.0.0.0:*
これにより、Docker デーモンがポート 2375 で TCP 経由でアクセス可能になったことが確認できます。
カスタム TCP ポートで Docker Model Runner を有効化
前のステップでは、Docker デーモンがデフォルトの TCP ポート 2375 でリッスンするように設定しました。このステップでは、デフォルトポートではなくカスタム TCP ポートでリッスンするように Docker デーモンを設定する方法を学びます。これはセキュリティ上の理由やポート競合を避けるために有用です。
再び/etc/docker/daemon.jsonファイルを修正します。TCP ポートを 2375 から 2376 などのカスタムポートに変更します。
nanoエディタを使用してdaemon.jsonファイルを開きます:
sudo nano /etc/docker/daemon.json
hostsキーを修正して、TCP ポートを 2375 から 2376 に変更します。ファイルの内容は以下のようになります:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}
Ctrl + Xを押し、Yで確認し、Enterでファイル名に書き込むことで保存します。
設定を変更した後、変更を有効にするために Docker サービスを再起動する必要があります。
sudo systemctl restart docker
次に、Docker デーモンが新しいカスタム TCP ポート 2376 でリッスンしており、デフォルトポート 2375 ではリッスンしていないことを確認しましょう。再びssコマンドを使用します。
まず、ポート 2376 を確認します:
sudo ss -tuln | grep 2376
ポート 2376 でプロセスがリッスンしていることを示す出力が表示されるはずです:
tcp LISTEN 0 4096 0.0.0.0:2376 0.0.0.0:*
次に、ポート 2375 ではリッスンしていないことを確認します:
sudo ss -tuln | grep 2375
このコマンドは何も出力しないはずで、Docker デーモンがポート 2375 でリッスンしていないことを示します。
これにより、Docker デーモンがカスタム TCP ポートでリッスンするように正常に設定されたことが確認できました。
Docker Model Runner の TCP 接続を無効化
前のステップでは、Docker デーモンがデフォルトおよびカスタム TCP ポートでリッスンするように設定しました。TCP を有効にすることはリモートアクセスに便利ですが、不要な場合は無効にし、ローカル通信にはデフォルトの Unix ソケットを使用する方が一般的に安全です。
このステップでは、設定ファイルから TCP ホストエントリを削除することで Docker デーモンの TCP 接続を無効にする方法を学びます。
再びnanoエディタを使用して/etc/docker/daemon.jsonファイルを修正します。
daemon.jsonファイルを開きます:
sudo nano /etc/docker/daemon.json
hostsキーを修正して、TCP エントリ(前のステップに応じて"tcp://0.0.0.0:2376"または"tcp://0.0.0.0:2375")を削除します。ファイルの内容には Unix ソケットエントリのみが含まれるようになります:
{
"hosts": ["unix:///var/run/docker.sock"]
}
Ctrl + Xを押し、Yで確認し、Enterでファイル名に書き込むことで保存します。
設定を変更した後、変更を有効にするために Docker サービスを再起動する必要があります。
sudo systemctl restart docker
次に、Docker デーモンがどの TCP ポートでもリッスンしていないことを確認しましょう。ssコマンドを使用してポート 2375 と 2376 の両方を確認します。
ポート 2375 を確認:
sudo ss -tuln | grep 2375
このコマンドは何も出力しないはずです。
ポート 2376 を確認:
sudo ss -tuln | grep 2376
このコマンドも何も出力しないはずです。
これにより、Docker デーモンの TCP 接続が正常に無効化されたことが確認できました。デーモンはデフォルトの Unix ソケット経由でのみアクセス可能になり、ローカルアクセスのより安全なデフォルト設定に戻りました。
まとめ
この実験では、Docker デーモンの TCP 接続を有効化・無効化することで Docker Model Runner の設定を管理する方法を学びました。まず、/etc/docker/daemon.json設定ファイルを修正してhosts配列に"tcp://0.0.0.0:2375"を追加し、Docker サービスを再起動することで、デフォルトの TCP ポート 2375 でリッスンするように設定しました。
また、カスタム TCP ポートで Docker デーモンを有効化する方法や、daemon.jsonファイルのhosts配列から TCP エントリを削除して Docker サービスを再起動することで TCP 接続を完全に無効化する方法についても学習しました。これらの手順を通じて、様々なユースケースに応じて Docker のネットワークアクセシビリティを設定する方法を実践的に理解することができました。



