「Docker Compose」- 向遠程主機部署服務 @20210402


問題描述

通常,我們本地編寫 docker-compose.yml 文件,然后運行測試。但是,我們需要在 arm64 環境中進行測試,無法在本地直接運行測試。

我們希望可以在本地編寫,然后本地使用 docker-compose up 直接在遠程 arm 主機上運行測試。

該筆記將介紹:在本地運行 docker-compose 命令,但是在遠程主機中啟動服務的方法。

方法一、在上傳后執行(傳統方法)

在傳統方法中,我們需要將 docker-compose.yaml 及相關文件,上傳到遠程主機,然后執行 docker-compose up 啟動服務。

這里不再贅述……

方法二、使用 DOCKER_HOST 變量

使用 tcp 協議

第一步、修改 Docker 服務配置,使其監聽 TCP/2375 端口(不再贅述)

第二步、通過 DOCKER_HOST 變量指定遠程服務,比如 DOCKER_HOST="tcp://0.0.0.0:2375" 指定遠程服務:

DOCKER_HOST="tcp://192.168.10.143:2375" docker-compose up -d

docker-compose --host "tcp://192.168.10.143:2375" up -d

使用 ssh 協議(推薦)

我們想使用 TCP 協議(即我們不會改變 docker 配置,使其監聽 TCP 端口),而是使用 SSH 協議:

DOCKER_HOST="ssh://root@192.168.10.143" docker-compose up -d

docker-compose --host "ssh://root@192.168.10.143" up -d

使用 SSH 協議需要注意以下問題:
1)從 Docker 18.09 開始支持 SSH 協議;
2)如果使用 SSH KEY 連接主機,需要 ssh-add -k /path/to/key-file 命令添加密鑰,因為 docker-compose 不支持命令行指定密鑰,也不會解析 .ssh/config 文件。

該方法的局限性

雖然是遠程執行,但本質上還是將命令發送到 Docker 守護進程,也就是說本地配置文件不會發送到遠程主機。即類似於 volumes: ["./config:/config"] 指令不會生效,因為在 config 下的配置文件不會發送到遠程主機。

方法三、使用 Docker Context 命令

在 Docker 19.03.0 中,引入 Docker Context 支持。Docker Engine release notes | Docker Documentation

第一步、創建並查看上下文:

docker context create remote ‐‐docker "host=ssh://user@remotemachine"

docker context ls

第二步、使用上下文操作:

docker-compose ‐‐context remote up -d

該方法的局限性

在本質上「該方法」與「方法二」類似,只是不再在命令行中指定 Docker 服務信息,而是換成上下文的形式。並且該方法也具有方法二的局限性。

相關文章

「Docker Compose」- 配置 Bash 補全(Bash Completion)
「Docker Compose」- docker-compose.yaml(學習筆記)
「Docker Compose」- 在構建時,使用網絡加速(代理)
「Docker Compose」- 生成鏡像構建命令
「Docker Compose」- 開機自動啟動應用容器

參考文獻

How to deploy on remote Docker hosts with docker-compose - Docker Blog
dockerd | Docker Documentation
docker-compose fails with ssh:// protocol with PasswordRequiredException: Private key file is encrypted · Issue #6513 · docker/compose
paramiko ssh transport leads to strange discrepancies to docker cli · Issue #2289 · docker/docker-py
Docker Compose doesn't work when SSH connection used to remote Docker Engine · Issue #6336 · docker/compose
Docker Tips: Access the Docker Daemon via SSH | by Luc Juggery | Better Programming | Medium
Docker Context | Docker Documentation



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM