如何在远程 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。

Install docker-machine Create machines using an existing VM/Host with SSH.

驱动程序将在创建时执行一系列任务:

如果主机上没有运行docker,会自动安装。 它将更新主机包(apt-get update、yum update…)。 它将生成证书以保护 docker 守护进程。 Docker 守护进程将重新启动,因此所有正在运行的容器都将停止。 主机名将更改为适合机器名称。

将本地容器部署到 remote_server:

通过generic driverremote_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) 上,您将使用通常的dockerdocker-compose 命令用于buildrun 容器。

以上是关于如何在远程 ubuntu 服务器上部署 docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章

MySQLUbuntu 安装部署 MySQL

MySQLUbuntu 安装部署 MySQL

如何在Ubuntu 20.04上安装Docker Compose

如何在Ubuntu 20.04上安装Docker Compose

Windows使用XRDP远程桌面连接Ubuntu后没有Dock桌面图标及UI难看问题解决

Ubuntu 服务器安装 MySQL 远程数据库