泊坞窗图像会列出整个图像的大小还是仅列出其一层?

时间:2020-06-27 05:29:46

标签: linux docker

# apply function along axis

flag = np.apply_along_axis(lambda x: x <= 10, 1, df.values)
print(flag)

[[ True  True]
 [ True  True]
 [ True  True]
 [ True  True]
 [ True  True]
 [False False]
 [False False]
 [False False]
 [False False]
 [False False]]

# split the True/False in separate arrays
v1 = df.values[flag].reshape(-1, 2)
v2 = df.values[~flag].reshape(-1, 2)

print(v1)

array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])

print(v2)

array([[11, 12],
       [13, 14],
       [15, 16],
       [17, 18],
       [19, 20]])

# simply join the data and paste the columns

v3 = np.hstack([v1, v2])

v1 = np.apply_along_axis(lambda x: str(x[0])+str(x[2]), 1, v3)
v2 = np.apply_along_axis(lambda x: str(x[1])+str(x[3]), 1, v3)

df = pd.DataFrame({'odd-odd': v1, 'even-even': v2})
print(df)

  odd-odd even-even
0     111       212
1     313       414
2     515       616
3     717       818
4     919       102

高于平均值user@localhost:~/docker-pyzmq$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpinepyzmq_raw latest fd24a753f505 2 minutes ago 23.9MB <none> <none> 3f763de0fb0b 7 minutes ago 23.9MB alpinepyzmq_small latest c7a1f42d0bfd 14 minutes ago 94.8MB alpinepyzmq latest 5be9ed0fcbcb 17 minutes ago 317MB <none> <none> 97aa31fe216a 19 minutes ago 317MB <none> <none> b167c481edc2 22 minutes ago 338MB <none> <none> fe8504847607 29 minutes ago 304MB <none> <none> 5b845a00f4d9 32 minutes ago 79.5MB <none> <none> 2d6926b0c665 32 minutes ago 79.5MB 的输出是否可以在计算机内部运行并且重量仅为23.9mb?还是这个大小取决于其他图层?如果是这样,我如何找出整个图像尺寸?

3 个答案:

答案 0 :(得分:1)

文档可以帮助回答这个问题,

SIZE是图片及其所有父图片占用的交流空间。这也是保存Docker时创建的Tar文件的内容使用的磁盘空间。

在此注意:如果图像具有多个存储库名称或标签,则将多次列出该图像。该单个图像(通过其匹配的IMAGE ID可以识别)只用完一次列出的SIZE

Source

答案 1 :(得分:1)

是否可以在alp内部运行高于alpinepyzmq_raw的输出 电脑,它的重量仅为23.9mb?

图像大小和容器大小是两个不同的东西。

图片大小:

执行docker image ls时,列大小不一定是图像的大小,因为那是当前图像+所有这些父图像的大小:

SIZE是图像及其所有空间占用的累积空间 父图像。 Ť 23.9

对于没有父级的基本图像(例如Alpine),您可以考虑图像尺寸。
在docker中,父映像不会在每个子映像中合并,而是存储在不同的层中以共享。
要了解图像的实际尺寸(不包括父尺寸),请使用docker history IMAGE

容器尺寸:

容器尺寸不严格等于图像尺寸。
此外,容器同时使用内存(ram)和磁盘。
To know disk occupation大小:

docker system df 

这确实呼应了著名的df linux command,该磁盘显示了磁盘上的已用/可用空间。

答案 2 :(得分:1)

在docker中,映像是使用dockerfile创建的。每个图像由多层组成。每层对应于dockerfile中的特定指令。 Docker使用联合文件系统将这些层安装在彼此之上。因此,您可以将图像视为构建在多个只读层(UFS)之上的最后一层。您可以通过docker image inspect -f '{{.RootFS.Layers}}' <image>查看docker镜像所基于的图层。 通常,您想使图像尺寸尽可能小,因此在您的dockerfile中广泛使用&&。例如:- 您将更喜欢

From Ubuntu
RUN aptg-get update && apt-get install vim

而不是

From Ubuntu
RUN apt-get update
RUN apt-get install vim

从docker 1.10开始,RUNADDCOPY语句为图像添加了一个新层。

此外,您还应该使用多阶段构建,其中可以在同一dockerfile中使用多个基础,并且每个构建都开始新的构建阶段。这样,您就可以在最终图像中保留所有不需要的内容。

上面输出中显示的图像大小是最终图像大小,是的,您可以在容器中运行此图像,但不是运行此图像的容器的最终大小。从图像运行容器时,实际上是在容器内创建该图像的读写副本。这是容器层,允许修改图像的整个副本。因此,您的容器可能会变大。您可以使用docker system df -v

查看容器的大小