我可以运行docker图像的中间层吗?

时间:2017-03-04 23:48:17

标签: docker dockerfile

当我从存储库中获取一个docker图像时,看到它带有一些带有一些ID的图层但是当我尝试使用 docker run 运行它时,它告诉我它可以'找到它。

我的问题是这样的,我可以运行一个docker图像的某一层,我可以通过 docker history< image_id> ,就像古生物学家挖掘寻找有趣的东西一样?

我做了什么:

docker pull ruby
Using default tag: latest
latest: Pulling from library/ruby
693502eb7dfb: Already exists 
081cd4bfd521: Already exists 
5d2dc01312f3: Already exists 
54a5f7da9a4f: Pulling fs layer 
168cf3f33330: Pulling fs layer 
021d84fef638: Pulling fs layer 
168c3c107cd1: Waiting 
f001b782a027: Waiting

然后:

docker run --rm -it 5d2dc01312f3 bash
Unable to find image '5d2dc01312f3:latest' locally

当我拉出我已经构建并发布的图像时,问题向我推出,我可以清楚地看到一层有大约1.2go的大小,它是我从我使用的机器复制一些文件的层建立图像,在下一层我清理和删除了一些文件,因为我正在清理图像,但图像的总大小约为1.5go,这意味着大胖子层是1.2go是我想要的看看我是否可以窥视那个脂肪层。

3 个答案:

答案 0 :(得分:8)

您可以运行Docker层的中间 image ,这可能是您想要的。

在构建过程中,您可能需要在构建过程中的特定点(步骤)检查图像,例如在Docker构建输出中,您将看到:

Step 17/30 : RUN rm -rf /some/directory
---> Running in 5ab963f2b48d

5ab963f2b48d是图片ID,并且当您列出图片时,您会在列表中看到该ID,例如

$ docker image ls --all
REPOSITORY    TAG      IMAGE ID       CREATED        SIZE
<none>        <none>   5ab963f2b48d   7 minutes ago  1.18GB

例如,要运行该图像(使用终端),您可以简单地:

docker run -i -t 5ab963f2b48d /bin/bash

另请参阅:Run a Docker Image as a Container

答案 1 :(得分:1)

是的,这是可能的,但是如果你使用docker&gt; = 1.10只能使用自建图像。例如除了最顶层之外,<?php $test=mysql_query("SELECT * FROM newsites"); $deneme=mysql_fetch_row($test); ?> <div class='container'> <div class='row'> <?php while ($deneme=mysql_fetch_assoc($test)) { extract($deneme); echo '<div class="col-md-3 col-sm-6 col-xs-12 back-colour">'; echo '<td><img class="img-responsive" src="images/'.$deneme['site_pic'].'" width="120" height="20"/></td>'; echo '<p class="box-design">'.$deneme['site_name'].'</p>'; echo '<p class="box-design">'.$deneme['site_link'].'</p>'; echo '<p class="box-design">'.$deneme['site_ref'].'</p>'; echo '<p class="box-design">'.$deneme['site_type'].'</p>'; echo '</div>'; } ?> </div> </div> 将输出docker history ruby,因为它们没有标记。如果您自己构建它们,它们将有一个标记,您可以像平常一样启动它们

答案 2 :(得分:1)

不,你不能运行图层,只能运行图像。所以这取决于是否有与该图层关联的中间图像!

以下是典型情况:

  1. 您在主机上构建图像:中间图像将是 为此图层创建(这是为docker构建缓存完成的)
  2. 将图像推送到注册表:仅推送最终图像(引用所有图层),但不会推送任何中间图像。
  3. 您将图像拉到另一台主机上:最终图像(包含所有图层)现在可在其他主机上使用。您可以通过运行docker history <image-id>
  4. 来显示其图层

    拉动图像时看到的摘要是图层的摘要,它们不是中间图像。

    <missing>输出的图像列中的值docker history表示没有与这些图层关联的图像,因此无法真正运行。

    docker守护程序不允许访问这些图层,除非图像是在同一个docker主机上构建的(或docker cache was distributed

    您可以在explaining-docker-image-ids

    了解有关图层的更多信息