1. 前提:Docker Engine のインストール
CentOS Stream 9 / RHEL 9 系を想定し、公式リポジトリから Docker Engine 24.x をインストール済みとします。
2. systemd ユニットファイルの編集
デーモン起動オプションに TCP エンドポイントを追加します。
# /etc/systemd/system/docker.service.d/override.conf を作成
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf > /dev/null <<'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd \
-H unix:///var/run/docker.sock \
-H tcp://0.0.0.0:2376
EOF
上記は systemctl edit docker を使っても同じ内容を追加できます。
3. ファイアウォールとデーモンの再読み込み
sudo firewall-cmd --permanent --add-port=2376/tcp
sudo firewall-cmd --reload
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 補完スクリプトの導入(任意)
sudo dnf install -y bash-completion
source /etc/profile.d/bash_completion.sh
5. 動作確認
5-1. ローカルでの疎通テスト
curl -s http://localhost:2376/version | jq .
期待されるレスポンス例(一部抜粋):
{
"Platform": { "Name": "Docker Engine - Community" },
"Components": [
{ "Name": "Engine", "Version": "24.0.7" }
],
"Version": "24.0.7",
"ApiVersion": "1.43"
}
5-2. リモートホストからの接続
docker -H tcp://192.168.10.50:2376 info
6. 複数ホストを切り替える便利な方法
6-1. 環境変数による切り替え
export DOCKER_HOST=tcp://192.168.10.50:2376
docker ps
6-2. Docker Context を使った切り替え
# 登録
docker context create node50 --docker host=tcp://192.168.10.50:2376
docker context create node51 --docker host=tcp://192.168.10.51:2376
# 一覧
docker context ls
# 切り替え
docker context use node50
docker images
docker context use node51
docker images
7. セキュリティ補足
本記事では簡便のため TLS 無効化しています。本番利用時は以下を必ず実施してください。
- CA 証明書を発行し、サーバ・クライアント双方に配置
--tlsverifyオプションを追加- ポート 2376 を信ネットワーク以外で塞ぐ