如何在远程 ubuntu 服务器上部署 docker 容器?
Posted
技术标签:
【中文标题】如何在远程 ubuntu 服务器上部署 docker 容器?【英文标题】:How to deploy a docker container on a remote ubuntu server? 【发布时间】:2017-09-16 05:48:27 【问题描述】:我在 docker 容器中实现了一个 API,我想将此容器部署到远程 ubuntu 服务器。我该怎么做呢? 我的 API 使用了很多资源,并且我使用了 MLDB 框架来实现它。我想在这个远程 ubuntu 服务器上部署包含 API 的容器。 到目前为止,我已经找到了许多在 AWS 和 DigitalOcean 上部署 API 的指南,但是由于我已经可以访问远程 ubuntu 服务器而不是不需要这些,对吗? 那么如何部署我的容器以便其他人能够测试我的 API?如果有更好的方法来部署我的 API(希望是免费的或廉价的),请告诉我。
提前致谢。
【问题讨论】:
【参考方案1】:自从Docker 18.09.0 发布以来,这变得容易多了。此版本分别为DOCKER_HOST
环境变量和docker ...
命令添加了对ssh
协议和-H
参数的支持。
首先,您需要SSH access to the target machine(任何方法都可能需要它)。
然后,要么:
# Re-direct to remote environment.
export DOCKER_HOST="ssh://my-user@remote-host"
# Run a container. To prove that we are on remote-host, this will print its hostname.
docker run --rm --net host busybox hostname -f
# All docker commands here will be run on remote-host.
# Switch back to your local environment.
unset DOCKER_HOST
或者,如果您愿意,只需一个命令即可完成所有操作:
docker -H "ssh://my-user@remote-host" run --rm --net host busybox hostname -f
请注意,docker-compose
v.1.23.1(截至撰写时的最新版本)及以下版本尚不支持此功能。但是,it will be part of the next release。
【讨论】:
【参考方案2】:在目标机器上设置passwordless SSH
运行以下命令远程管理目标 VM 上的 Docker(如果需要也安装 Docker):
docker-machine create --driver generic --generic-ip-address=10.123.2.74 --generic-ssh-user=docker --generic-ssh-key ~/.ssh/id_rsa some_name
您可以找到有关通用驱动程序here 的更多信息。
-
为新配置的docker机器设置所需的环境变量:
eval $(docker-machine env some_name)
-
在此终端/cmd 窗口中运行的任何 Docker 命令都将在远程计算机上运行。试运行:
码头工人ps
现在您可以像在本地一样运行 docker 容器了。
PS - 如果您需要通过 Docker 工具箱远程管理在 Windows 上运行的 docker 实例,事情会变得有点复杂。 (您需要通过 VirtualBox 的桥接网络适配器或端口转发解决对 docker linux VM(ssh、docker 引擎、容器端口)中所需端口的网络访问;同时解决 windows 防火墙问题)
【讨论】:
+1,但是,您忘记将新机器名称添加到docker-machine create
命令中,这将导致错误。
some_name
不是机器名吗?【参考方案3】:
我建议在您的本地开发环境中安装docker-machine
,并使用generic driver
添加remote_server
,然后您可以使用eval $(docker-machine env remote_server)
连接到它并部署您的API。
驱动程序将在创建时执行一系列任务:
如果主机上没有运行docker,会自动安装。 它将更新主机包(apt-get update、yum update…)。 它将生成证书以保护 docker 守护进程。 Docker 守护进程将重新启动,因此所有正在运行的容器都将停止。 主机名将更改为适合机器名称。
将本地容器部署到 remote_server:
通过generic driver
将remote_server
添加到docker-machine
后,请执行以下操作以部署您的API。
获取服务器的环境:docker-machine env remote_server
将 shell 连接到服务器:eval $(docker-machine env remote_server)
构建 API 映像:docker build -t api_image .
。 (Dockerfile 目录)
运行容器:docker run -d -p 1111:1111 api_image
使用curl
:curl $(docker-machine ip remote_server):1111
希望对您有所帮助。
【讨论】:
这似乎是我需要的解决方案。假设我能够连接到远程主机,那么如何部署 API? 在eval $(docker-machine env remote_server)
上,您将使用通常的docker
或docker-compose
命令用于build
和run
容器。以上是关于如何在远程 ubuntu 服务器上部署 docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Ubuntu 20.04上安装Docker Compose
如何在Ubuntu 20.04上安装Docker Compose