我在docker容器中实现了一个API,我希望将此容器部署到远程ubuntu服务器。我怎么能这样做呢? 我的API使用了很多资源,我使用了MLDB框架来实现它。我想在这个远程ubuntu服务器上部署包含API的容器。 到目前为止,我已经找到了许多在AWS和DigitalOcean上部署API的指南,但是因为我已经可以访问远程ubuntu服务器而不是我不需要这些服务器了吗? 那么我如何部署我的容器以便其他人能够测试我的API?如果有更好的方式来部署我的API(希望免费或廉价),请告诉我。
提前致谢。
答案 0 :(得分:7)
目标计算机上的设置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的更多信息。
eval $(docker-machine env some_name)
docker ps
现在,您可以像在本地一样运行docker容器。
PS - 如果您需要通过Docker Toolbox远程管理在Windows上运行的docker实例,事情会变得有点复杂。 (您需要通过VirtualBox的桥接网络适配器或通过端口转发解决对docker linux VM(ssh,docker引擎,容器端口)所需端口的网络访问;还解决Windows防火墙问题)
答案 1 :(得分:6)
自Docker 18.09.0发布以来,这变得非常容易。此版本分别为ssh
环境变量和DOCKER_HOST
命令的-H
自变量添加了对docker ...
协议的支持。
首先,您需要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 :(得分:3)
我建议您在本地开发环境中安装docker-machine
并使用generic driver
添加remote_server
,然后您可以使用eval $(docker-machine env remote_server)
连接到它并部署您的remote_server
API。
驱动程序将在create:
上执行任务列表
- 如果Docker未在主机上运行,则会自动安装。
- 它将更新主机包(apt-get update,yum update ...)。
- 它将生成证书以保护docker守护程序。
- 将重新启动docker守护程序,因此将停止所有正在运行的容器。
- 主机名将更改为适合计算机名称。
将本地容器部署到remote_server:
通过docker-machine
将generic driver
添加到docker-machine env remote_server
后,请执行以下操作来部署您的API。
获取服务器的envs:eval $(docker-machine env remote_server)
将shell连接到服务器:docker build -t api_image .
构建API图片:docker run -d -p 1111:1111 api_image
。 (Dockerfile DIR)
运行容器:curl
使用curl $(docker-machine ip remote_server):1111
: VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder
.newInstance("smallVehicle")
.addCapacityDimension(0, 4);
VehicleType vehicleType = vehicleTypeBuilder
.build();
/**
* Create vehicle.
*/
Builder vehicleBuilder = VehicleImpl.Builder
.newInstance("audi");
vehicleBuilder.setStartLocation(Location.Builder
.newInstance()
.setCoordinate(new Coordinate(4, 4))
.setIndex(0).build());
vehicleBuilder.setType(vehicleType);
// Start time and end time of the resource in seconds from 10AM to 8PM.
vehicleBuilder.setEarliestStart(36000);
vehicleBuilder.setLatestArrival(72000);
VehicleImpl vehicle = vehicleBuilder.build();
/**
* Create the services those should be accomplished by vehicle.
*/
Service service1 = Service.Builder
.newInstance("1(11am-1pm)1hr")
.addSizeDimension(0, 1)
.setLocation(
Location.Builder
.newInstance()
.setCoordinate(
new Coordinate(4, 5))
.setIndex(1).build())
// Job should be started at 10AM and ends at 8PM.
.addTimeWindow(39600,46800)
// Time required to do job is 4 hours
.setServiceTime(3600).build();
Service service2 = Service.Builder
.newInstance("2(2pm-5pm)1hr")
.addSizeDimension(0, 1)
.setLocation(
Location.Builder
.newInstance()
.setCoordinate(
new Coordinate(5, 4))
.setIndex(1).build())
// Time required to complete job is 3 hours.
.setServiceTime(3600)
// Job should be started at 2PM and ends at 8PM.
.addTimeWindow(50400, 61200).build();
Service service3 = Service.Builder
.newInstance("3(6pm-8pm)1hr")
.addSizeDimension(0, 1)
.setLocation(
Location.Builder
.newInstance()
.setCoordinate(
new Coordinate(5, 8))
.setIndex(3).build())
// Service takes 1 hour to complete.
.setServiceTime(3600)
// From 12-1
.addTimeWindow(64800, 72000).build();
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder
.newInstance();
vrpBuilder.addVehicle(vehicle);
vrpBuilder.addJob(service1).addJob(service2)
.addJob(service3);
vrpBuilder
.setFleetSize(VehicleRoutingProblem.FleetSize.INFINITE);
VehicleRoutingProblem vrp = vrpBuilder.build();
/**
* Create the algorithm based on the VRP you have created.
*/
VehicleRoutingAlgorithm algorithm = Jsprit
.createAlgorithm(vrp);
Collection<VehicleRoutingProblemSolution> solutions = algorithm
.searchSolutions();
/**
* Get the best route among given sollutions.
*/
VehicleRoutingProblemSolution bestOne = Solutions
.bestOf(solutions);
希望您觉得这很有帮助。