在机器A上我安装了泊坞窗图像FOO / BAR。如何查询该图像的版本,以及如何将相同版本安装到机器B?
请注意,在机器上BI不需要最新版本的FOO / BAR,但版本与机器A相同。我不想对机器A上的图像进行本地修改
答案 0 :(得分:1)
Docker使用标记或摘要来区分不同版本的图像。当既未指定标记或摘要时,所有Docker命令都假定您要使用默认标记+-----+---------+----------+
| id| weights| indices|
+-----+---------+----------+
|11830| [1, 1]| [8, 28]|
|11113| [1, 3]| [3, 2]|
| 1081| [1]| [3]|
| 2654| [1]| [3]|
|10633| [1]| [3]|
|11351| [1]| [12]|
| 2737| [1]| [26]|
| 6590| [1]| [2]|
+-----+---------+----------+
。但你总是可以更具体。
假设图像来自注册表import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.sql.functions.udf
def toSparseVector: ((Array[Int], Array[BigInt]) => Vector) = {(a1, a2) => Vectors.sparse(1000, a1, a2.map(x => x.toDouble))}
val udfToSparseVector = udf(toSparseVector)
val dfWithSparseVector = dfWithLists.withColumn("SparseVector", udfToSparseVector($"indices", $"weights"))
并且被称为latest
,有两种方法可以提取相同版本的图像:标记或摘要。如果您知道它是唯一且不重复使用,则只能使用该标记。使用内部版本号或Git哈希作为标记时通常会出现这种情况,但如果您想绝对确定,请使用摘要。
在计算机A上,运行FOO
。查找BAR
及其摘要(以docker images --digests
开头)。
在计算机B上,运行以下命令并将FOO/BAR
替换为计算机A的摘要:
sha:
这是一个看起来如何的例子:
{digest}
这会将机器A上可用的相同版本下载到机器B.由于它来自注册表,因此它是一个没有任何修改的新副本。
答案 1 :(得分:0)
使用标记!
docker image支持tag,通常用作版本号。构建图像时,您可以指定标记:
docker build -t myimage:v0.1 .
然后使用相同的图像很容易:
docker run -d myimage:v0.1 entrypoint.sh
如果您没有指定标签,一切正常。因为docker使用默认标记latest
,这在更新和保持同步时会很烦人。
latest
图像可以随时更改(通常使用CI / CD自动构建),因此容易使用的容器可以使用不同的图像。如果没有您的预期,始终使用标记!