【问题标题】:How to deploy a docker container on a remote ubuntu server?如何在远程 ubuntu 服务器上部署 docker 容器?
【发布时间】:2017-09-16 05:48:27
【问题描述】:

我在 docker 容器中实现了一个 API,我想将此容器部署到远程 ubuntu 服务器。我该怎么做呢? 我的 API 使用了很多资源,并且我使用了 MLDB 框架来实现它。我想在这个远程 ubuntu 服务器上部署包含 API 的容器。 到目前为止,我已经找到了许多在 AWS 和 DigitalOcean 上部署 API 的指南,但是由于我已经可以访问远程 ubuntu 服务器而不是不需要这些,对吗? 那么如何部署我的容器以便其他人能够测试我的 API?如果有更好的方法来部署我的 API(希望是免费的或廉价的),请告诉我。

提前致谢。

【问题讨论】:

    标签: api ubuntu docker ubuntu-server mldb


    【解决方案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】:
      1. 在目标机器上设置passwordless SSH

      2. 运行以下命令远程管理目标 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 的更多信息。

      1. 为新配置的docker机器设置所需的环境变量:

      eval $(docker-machine env some_name)

      1. 在此终端/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 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 容器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多