谁知道docker官方图片是否基于X

谁知道docker官方图片是否基于X,docker,docker-image,Docker,Docker Image,我想使用部署一个PHP容器 之后,我需要安装imagick,因此我需要首先使用apt get安装libmagickwand dev 好吧,PHP图像可以基于另一个图像,我需要它基于Ubuntu才能使用apt-get 如果我的主机有apt get,我知道它是可用的,但如果我在MacOS的Docker上运行此映像,我可能没有它 我如何知道官方形象是否基于我需要的另一个形象,如本案例? 我想感谢任何与我所披露内容相关的其他评论,以便向我澄清或指出错误 我的dockerfile看起来像: # Backe

我想使用部署一个PHP容器

之后,我需要安装
imagick
,因此我需要首先使用
apt get
安装
libmagickwand dev

好吧,
PHP
图像可以基于另一个图像,我需要它基于Ubuntu才能使用
apt-get

如果我的主机有
apt get
,我知道它是可用的,但如果我在MacOS的Docker上运行此映像,我可能没有它

我如何知道官方形象是否基于我需要的另一个形象,如本案例?

我想感谢任何与我所披露内容相关的其他评论,以便向我澄清或指出错误

我的dockerfile看起来像:

# Backend Image - https://hub.docker.com/_/php/
FROM php:7.2-apache

# Imagick
RUN apt-get update && apt-get install -y libmagickwand-dev
RUN pecl install imagick-3.4.3 \
    && docker-php-ext-enable imagick

这是一个好的开始。让我逐一谈谈你的担忧,然后我会提供一些建议

好吧,PHP图像可以基于另一个图像,我需要它基于Ubuntu才能使用apt get

官方PHP映像是从各种基本发行版(列出它们)构建的。从那里我可以看到
7.2-apache
可能基于debian stretch,这是一个提供apt的好选择。您可以看到这些图像是如何从DockerFile构建的,DockerFile在该部分中也链接到github

如果我的主机有apt get,我知道它是可用的,但是如果我在Docker for MacOS上运行此映像,我可能没有它

需要明确的是,docker的最大好处是,只要有docker,主机运行的是什么操作系统都无关紧要。映像中可用的组件仅由它所基于的映像和构建它的dockerfile定义——换句话说,如果您将dockerfile基于某个发行版(如debian stretch),该发行版包括apt,那么无论您构建映像还是运行映像,您都将拥有该版本及其附带的所有内容。OSX、Windows、Debian、Ubuntu、CoreOS、Centos——都不重要。这就是docker如此庞大的一个重要原因——处理将代码库与操作系统联系在一起的依赖关系实际上是一个相当大的挑战,docker让它彻底消失

实际上,OSX没有本机docker所需的内核支持,而且无论如何也不能在本地运行linux ELF可执行文件,因此docker for Mac使用OSX本机虚拟化创建一个几乎不可见的linux实例,OSX端的
docker
可执行文件负责代理到linux层。但这对用户来说是透明的

我怎样才能知道官方形象是否基于我所需要的另一个,比如这个案例

通过查看dockerhub库页面中链接到的docker文件。在您的例子中,这是基于stretch-slim/的。Debian stretch slim非常适合docker,因为它重量轻,并且不包含一堆与docker容器无关的东西

所以,你所做的看起来很好,而且你的起步也很好

我想提一件你可能要考虑的事情。apt的工作方式是,当您
apt获取更新时,它会在本地下载大量包元数据。除非在创建索引的同一运行命令中删除它,否则这些索引文件将位于该运行命令创建的图层中;即使在后续层中删除它们,它们占用的空间仍将是图像的一部分

所以当你这样做的时候:

RUN apt-get update && apt-get install -y libmagickwand-dev
RUN pecl install imagick-3.4.3 \
    && docker-php-ext-enable imagick
你最终会得到一个比它需要的更大的图像。这就是为什么docker的
apt
规范调用看起来更像是在:


&&rm-r/var/lib/apt/lists/*
在创建包的同一RUN命令中删除不再需要的包元数据*,因此在运行时它不会随映像一起提供。这就是为什么您必须再次获得更新。当然,您已经意识到,为了获得最新的包存储库索引,您必须这样做。因此,简而言之,将
和&rm…
添加到上面的
apt
行的末尾将是一种良好的做法,并将使用您现在拥有的内容。

首先检查图像的文档。如果这没有帮助,你可以随时拉图像并检查它。我没有注意到图像描述开头的标签链接到dockerfiles!这主要是我的问题。无论如何谢谢@Henry
docker run-rm-it。。。sh
根据图像获取容器中的交互式shell,然后尝试运行
apt get
,看看会发生什么。精彩的解释。感谢所有的见解。
RUN apt-get update && apt-get install -y \
        $PHPIZE_DEPS \
        ca-certificates \
        curl \
        xz-utils \
    --no-install-recommends && rm -r /var/lib/apt/lists/*