我有一个相当大的具有多层的 Dockerfile。其中一些层需要相当长的时间。我注意到很多事情并不相互依赖。
因此,显而易见的问题是:我可以docker build并行吗?
docker构建似乎只有限制构建速度的选项,而不是加速它(例如--memory)。
示例:假设您有一个Dockerfile看起来像这样的。我现在想调用一个docker build --some-flag并行构建所有阶段的函数,除非它们必须相互协作。
FROM someImage AS stage1
# do some task
FROM otherImage AS stage2
# do another taks
FROM yetAnotherImg As stage3
# more work
COPY --from=stage2 ... # stage3 has to wait for stage2 to finish
Run Code Online (Sandbox Code Playgroud)
你知道是否--some-flag存在吗?您知道如何实现目标的不同方式吗?
编辑:
我唯一能想到的就是将 Dockerfile 分成更多阶段,从而使修改不那么痛苦,但这并不是一个真正理想的解决方案
我想知道gVisor和Weave Ignite在用例方面是否有区别(如果有的话)。对我来说,他们似乎都在尝试类似的事情:让虚拟化环境中的代码执行更加安全。
gVisor 是通过引入runsc一个运行时来实现沙盒容器的,而 Ignite 是通过使用Firecracker 来实现的,在他们的上下文中,它似乎也被用作沙盒。
我想启动 a.exe (一个已编译的 cpp 程序)并传递一个文件到其中。在 CMD 上我会这样做a.exe < input.txt。如何在调试模式下使用 VS Code 启动它?
这是我的 launch.json 文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/a.exe",
"args": [
"<",
"input.txt"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": true,
"miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
"linux": {
"MIMode": "gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb"
}
}
]}
Run Code Online (Sandbox Code Playgroud)
正如args我已经尝试使用的"<", "input.txt"那样,就像这篇文章中的那样以及这篇文章"<input.txt"中的建议。两者都不起作用。按照此处的建议,在 cmd 上进行调试似乎是一种非常糟糕的做法。当我拥有很棒的 VS …
我想知道Boruvkas算法和Kruskals算法之间的区别。
他们的共同点:
唯一的区别似乎是,Boruvka 的视角是每个单独的节点(从那里寻找最便宜的边),而不是查看整个图(像 Kruskal 那样)。
因此,Boruvka 似乎应该相对容易并行执行(与 Kruskal 不同)。真的吗?
我正在研究集群计算,想模拟一个具有一个领导节点和多个跟随节点的集群。我可以通过设置多个配置(每个节点一个)来做到这一点。现在,我想一次(或一个接一个)运行所有这些配置。
是否有可能做到这一点?
其他人已经尝试解决这个问题。他们提出的解决方案是为每个配置创建一个新launch.json文件.vscode夹。这似乎可行,但不切实际,因为我想启动 20 个(或 100 个)节点。
我有一个我这样定义的枚举:
def make_enum(**enums):
return type('Enum', (), enums)
an_enum = make_enum(first=1, second=2)
Run Code Online (Sandbox Code Playgroud)
稍后我想检查一下,我在函数中作为参数的值是否是an_enum. 通常我会这样做
assert 1 in to_list(an_enum)
如何将枚举对象an_enum转换为列表?如果这是不可能的,我如何检查值是否“是枚举的一部分”?
我想创建一个与旧名称空间相同的新名称空间。
我的方法看起来像这样(完整命令如下):
kubectl get <resources> -o json --namespace OLD-NAMESPACE | jq '.items[].metadata.namespace = "NEW-NAMESPACE"' | kubectl create -f -
Run Code Online (Sandbox Code Playgroud)
这基本上以 json 格式获取所有资源定义,用新名称空间替换旧名称空间,然后应用所有内容。
不幸的是,这不起作用,因为旧的定义包含名称空间特定的东西。为了避免这种情况,曾经有一个--export标志,但已被弃用,请参阅此处。
知道我该怎么做吗?
完整命令:
kubectl get bindings,configmaps,endpoints,limitranges,persistentvolumeclaims,persistentvolumes,pods,podtemplates,replicationcontrollers,resourcequotas,secrets,mutatingwebhookconfigurations,validatingwebhookconfigurations,controllerrevisions,daemonsets,deployments,replicasets,statefulsets,tokenreviews,localsubjectaccessreviews,selfsubjectaccessreviews,selfsubjectrulesreviews,subjectaccessreviews,horizontalpodautoscalers,cronjobs,jobs,certificatesigningrequests,leases,endpointslices,events,ingressclasses,networkpolicies,runtimeclasses,poddisruptionbudgets,rolebindings,roles,debugattachments,csidrivers,volumeattachments -o json --namespace OLD-NAMESPACE | jq '.items[].metadata.namespace = "NEW-NAMESPACE"' | kubectl create -f -
Run Code Online (Sandbox Code Playgroud) 我正在关注这个教程。
我初始化了我的项目并通过以下方式获取了依赖项
go mod init github.com/martin-helmich/kubernetes-crd-example
go get k8s.io/client-go@v0.17.0
go get k8s.io/apimachinery@v0.17.0
Run Code Online (Sandbox Code Playgroud)
我有一个使用import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1".
VS Code 向我展示了could not import k8s.io/apimachinery/pkg/apis/meta/v1 (no required module provides package "k8s.io/apimachinery/pkg/apis/meta/v1")。我在这里做错了什么?我的Go安装不正确吗?
我想在本地调试用 C++ 编写的 AWS Lambda 函数。理想情况下,我希望能够单步执行我的代码(就像您使用GDB或任何像样的 IDE 那样)。使用 AWS Lambdas 执行此操作的方法通常包括AWS SAM。
思路1,使用SAM调试:
不幸的是,SAM 不能让您调试提供的运行时,因为它“仅”支持 Node.js、Python 和 Go(比较文档)。
问题 1:
有没有办法以某种方式将 GDB 附加到我编译的 lambda 函数?
想法2,使用docker-lambda运行:
您还可以使用lambci/docker-lambda启动您的函数。如果你想得到一些调试输出,你可以做 strace docker run --rm -v my/build/dir:/var/task lambci/lambda:provided handler '{"some": "event"}'. 这有效,但并不是我正在寻找的调试质量。
问题2:
我可以以某种方式将 a 附加到正在运行的 lambda 函数docker-lambda吗?
想法3:远程:
绝望,去追求你能得到的任何东西(这不是我想做的)。
问题 3:
如果在本地真的没有办法做到这一点,我应该如何在 AWS 上做到这一点?
我想使用部落整洁。该程序应该检查我是否有标头防护,这就是我设置标志的原因llvm-header-guard。不幸的是,这会检查标头防护是否是 llvm-style,这是我不想要的。我想用#pragma once.
有谁知道如何告诉 clang-tidy 检查#pragma once而不是 llvm 风格的标头防护?
c++ ×3
docker ×2
kubernetes ×2
algorithm ×1
assert ×1
aws-lambda ×1
aws-sdk-cpp ×1
clang-tidy ×1
debugging ×1
docker-build ×1
enums ×1
exe ×1
firecracker ×1
gdb ×1
go ×1
graph ×1
gvisor ×1
header-files ×1
launch ×1
llvm ×1
migration ×1
module ×1
namespaces ×1
pragma ×1
python ×1
sandbox ×1
weave-ignite ×1
windows ×1