我在单个 Docker 网络上运行 1000 个容器,所有容器都来自同一个 Docker 镜像。
目前部署需要很长时间。我将流程分为 docker create 和 docker start,而不是单一的 docker run。
有什么方法可以并行旋转容器? - 乐于使用编程接口(interface)(Go、C 等)或使用 CLI 命令。
相关:Can Docker Engine start containers in parallel [3年前的提问和回答]
最佳答案
使用 Swarm 或 K8s 部署容器只是在使用启动命令部署大量容器之上增加了一层抽象,它们不会加快进程(只会使其更易于管理),所以我不知道为什么这么多人很快就为您的问题推荐这个。更多的抽象层不会加速解决方案。它们所允许的是水平扩展,因此如果您可以将这些容器分布在更多 docker 主机上,编排解决方案可以让管理变得更容易,并让您从任何故障中自动恢复。
运行命令是对创建/启动的包装。所有这些 docker 命令都是围绕 dockerd 的 REST API 的小型包装器。您可以直接访问该 API,但时间可能会花在设置命名空间上,包括 IPAM 和网络的 iptables 规则。我不知道有任何并行 API 会加速许多容器的启动。加快此过程的一种选择是删除一些命名空间隔离,或者查看用于创建命名空间的驱动程序的其他选项。切换到主机网络完全跳过了容器桥接网络和 iptables 规则,将您的容器与主机放在同一个网络命名空间中。
或者使用网络,您可以使用“none”网络配置容器,以避免与桥接网络和 iptables 规则的任何连接,尽管您仍然有一个环回地址。您确实可以选择在启动后将正在运行的容器连接到网络,因此如果您没有发布的端口,则可以选择将启动命令与网络设置分开,具体取决于您的用例。
除此之外,如果您想要更快,您可能需要更好或更多的硬件,可能需要具有性能增强的更新内核,或者您可能需要删除一些抽象层。如果您愿意自己处理一些网络和其他部分,您可以直接连接到 docker 使用的容器后端。请注意,这样做会丢失 docker 提供的一些功能。
关于docker - `docker start` 并行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52473105/
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
假设您在Ruby中执行此操作:ar=[1,2]x,y=ar然后,x==1和y==2。是否有一种方法可以在我自己的类中定义,从而产生相同的效果?例如rb=AllYourCode.newx,y=rb到目前为止,对于这样的赋值,我所能做的就是使x==rb和y=nil。Python有这样一个特性:>>>classFoo:...def__iter__(self):...returniter([1,2])...>>>x,y=Foo()>>>x1>>>y2 最佳答案 是的。定义#to_ary。这将使您的对象被视为要分配的数组。irb>o=Obje
我想测试一个并行赋值的返回值,我写了puts(x,y=1,2),但是不行,打印错误信息:SyntaxError:(irb):74:syntaxerror,unexpected',',expecting')'puts(x,y=1,2)^(irb):74:syntaxerror,unexpected')',expectingend-of-input有什么问题吗? 最佳答案 你有两个问题。puts和(之间的空格防止括号列表被解释为参数列表。一旦你在方法名后放置一个空格,任何argumentlisthastobeoutsidethepare
我正在尝试使用docker运行一个Rails应用程序。通过github的sshurl安装的gem很少,如下所示:Gemfilegem'swagger-docs',:git=>'git@github.com:xyz/swagger-docs.git',:branch=>'my_branch'我在docker中添加了keys,它能够克隆所需的repo并从git安装gem。DockerfileRUNmkdir-p/root/.sshCOPY./id_rsa/root/.ssh/id_rsaRUNchmod700/root/.ssh/id_rsaRUNssh-keygen-f/root/.ss
我在一个ruby脚本中有4个测试,我使用命令运行它们rubytest.rb输出看起来像LoadedsuitetestStarted....Finishedin50.326546seconds.4tests,5assertions,0failures,0errors,0pendings,0omissions,0notifications100%passed我想要实现的是,并行运行所有4个测试,而不是按顺序运行。大约4个线程,每个线程运行一个测试,有效地将执行时间减少到4个测试中最慢的一个+并行执行的时间很短。我遇到了this,但这似乎并行运行多个ruby测试文件-假设我有test
我有以下代码:FTP...do|ftp|files.eachdo|file|...ftp.put(file)sleep1endend我想在单独的线程或某种并行方式中运行每个文件。执行此操作的正确方法是什么?这是对的吗?这是我对parallelgem的尝试FTP...do|ftp|Parallel.map(files)do|file|...ftp.put(file)sleep1endend并行的问题是puts/outputs可以像这样同时发生:as=[1,2,3,4,5,6,7,8]results=Parallel.map(as)do|a|putsaend我怎样才能强制执行看跌期权,就像
在我的应用程序中,我有几个生成器类,它们负责获取从外部API请求接收的数据,并将资源构建/保存到数据库中。我正在处理大量数据,并已实现并行gem以通过使用多个进程来加快处理速度。但是,我发现对使用Parallel的方法的任何测试都会失败并出现相同的错误:ActiveRecord::StatementInvalid:PG::ConnectionBad:PQconsumeInput()serverclosedtheconnectionunexpectedlyThisprobablymeanstheserverterminatedabnormallybeforeorwhileprocessi
我在Heroku上构建了一个必须在Docker容器内运行的RoR应用程序。为此,我使用officialDockerfile.因为它在Heroku中很常见,所以我需要一些附加组件才能使这个应用程序完全运行。在生产中,变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试其他一些使用环境变量(在我的例子中是Mailtrap)的加载项,变量不会在运行时复制到实例中。所以我的问题很简单:如何让docker实例在Heroku上执行时知道环境变量?您可能会问,我已经知道我们可以在docker-compose.yml中指定一个environment指令。我想避免这种情况,以便能够通过项目
我有一个ruby脚本读取一个巨大的表(约2000万行),进行一些处理并将其提供给Solr用于索引目的。这一直是我们流程中的一大瓶颈。我打算在这里加快速度,我想实现某种并行性。我对Ruby的多线程特性感到困惑。我们的服务器有ruby1.8.7(2009-06-12补丁级别174)[x86_64-linux]。来自thisblogpost和thisquestionatStackOverflow可见Ruby没有“真正的”多线程方法。我们的服务器有多个核心,所以使用parallelgem对我来说似乎是另一种方法。我应该采用什么方法?此外,我们将非常感谢您对并行数据库读取馈送系统的任何投入。