谁知道官方 docker 图像是否基于 X
Who to know if an official docker image is X based
我想使用 official image.
部署一个 PHP 容器
之后,我需要安装 imagick
,所以我需要先安装 libmagickwand-dev
以及使用 apt-get
。
AFAIK,PHP
图片可以基于另一张图片,我需要它是例如Ubuntu基于可以使用apt-get
.
如果我的主机有 apt-get
,我知道它会可用,但如果我 运行 此图像在 Docker for MacOS我可能没有。
我怎么知道官方图片是否基于我需要的另一个图片,就像这种情况?
我要感谢与我所暴露的内容相关的任何其他评论,以便让我清楚或指出错误。
我的 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
这是一个好的开始。让我一一解决你的疑虑,然后我会提供一些建议。
AFAIK, PHP image can be based on another image, and I would need it to be e.g. Ubuntu based to be able to use apt-get.
官方 PHP 图像是从各种基础发行版构建的(https://hub.docker.com/_/php/ 列出了它们)。从那里我可以看到 7.2-apache
可能基于 debian stretch - 一个提供 apt 的绝佳选择。您可以看到这些图像是如何从它们的 Docker 文件构建的,这些文件也在该部分链接到 github。
If my host has apt-get, I know it would be available, but if I run this image on Docker for MacOS I may not have it.
需要说明的是,docker 的最大好处是 主机 运行 的操作系统 无关紧要,因为只要它有 docker。图像中可用的组件仅由它所基于的图像和构建它的 docker 文件定义 - 换句话说,如果你的 docker 文件基于某些发行版 - 比如 debian- stretch - 包括 apt,然后你将拥有那个版本和它附带的所有东西,无论你在哪里构建图像或 运行 它。 OSX、Windows、Debian、Ubuntu、CoreOS、Centos - 没关系。这是 docker 庞大的一个重要原因——处理将代码库与操作系统相关联的依赖关系实际上是一个相当大的挑战,而 docker 使其完全消失。
实际上,OSX 没有对本机 docker 所需的内核支持,并且无论如何都不能 运行 linux ELF 可执行文件在本地,所以 Docker for Mac 使用 osx-native 虚拟化创建几乎不可见的 linux 实例,osx 端的 docker
可执行文件负责代理到linux 层。但这对用户来说是透明的。
How can I know if and official image is based on another I need, like this case?
通过查看链接到 docker 中心库页面的 docker 文件。在您的情况下,这是 https://github.com/docker-library/php/blob/master/7.2/stretch/apache/Dockerfile 显示其基于 stretch-slim/ 。 Debian stretch-slim 非常适合 docker,因为它很轻,并且不包含一堆与 docker 容器无关的东西。
所以,您所做的看起来不错,而且您的入门也不错。
我确实想提一件事你可能想要考虑。 apt 的工作方式是,当您 apt-get update
时,它会在本地下载大量包元数据。除非您在创建它的同一 运行 命令中删除它 ,否则这些索引文件将位于由该 运行 命令创建的图层中;即使您在后续图层中删除它们,它们占据的 space 仍将是图像的一部分。
所以当你这样做时:
RUN apt-get update && apt-get install -y libmagickwand-dev
RUN pecl install imagick-3.4.3 \
&& docker-php-ext-enable imagick
您最终得到的图像比需要的要大。这就是为什么 docker 的 apt
的规范调用通常看起来更像 the upstream image you're using:
RUN apt-get update && apt-get install -y \
$PHPIZE_DEPS \
ca-certificates \
curl \
xz-utils \
--no-install-recommends && rm -r /var/lib/apt/lists/*
一旦不再需要包元数据,&& rm -r /var/lib/apt/lists/*
就会删除包元数据*在创建它的同一 运行 命令中 * 因此在 运行 时它不会随图像一起提供。这就是您必须再次 apt-get update
的原因。您肯定已经意识到无论如何您都必须这样做才能获得最新的包存储库索引。所以简而言之,在上面 apt
行的末尾添加 && rm ...
是一个很好的做法,并且可以使用你现在拥有的内容。
我想使用 official image.
部署一个 PHP 容器之后,我需要安装 imagick
,所以我需要先安装 libmagickwand-dev
以及使用 apt-get
。
AFAIK,PHP
图片可以基于另一张图片,我需要它是例如Ubuntu基于可以使用apt-get
.
如果我的主机有 apt-get
,我知道它会可用,但如果我 运行 此图像在 Docker for MacOS我可能没有。
我怎么知道官方图片是否基于我需要的另一个图片,就像这种情况?
我要感谢与我所暴露的内容相关的任何其他评论,以便让我清楚或指出错误。
我的 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
这是一个好的开始。让我一一解决你的疑虑,然后我会提供一些建议。
AFAIK, PHP image can be based on another image, and I would need it to be e.g. Ubuntu based to be able to use apt-get.
官方 PHP 图像是从各种基础发行版构建的(https://hub.docker.com/_/php/ 列出了它们)。从那里我可以看到 7.2-apache
可能基于 debian stretch - 一个提供 apt 的绝佳选择。您可以看到这些图像是如何从它们的 Docker 文件构建的,这些文件也在该部分链接到 github。
If my host has apt-get, I know it would be available, but if I run this image on Docker for MacOS I may not have it.
需要说明的是,docker 的最大好处是 主机 运行 的操作系统 无关紧要,因为只要它有 docker。图像中可用的组件仅由它所基于的图像和构建它的 docker 文件定义 - 换句话说,如果你的 docker 文件基于某些发行版 - 比如 debian- stretch - 包括 apt,然后你将拥有那个版本和它附带的所有东西,无论你在哪里构建图像或 运行 它。 OSX、Windows、Debian、Ubuntu、CoreOS、Centos - 没关系。这是 docker 庞大的一个重要原因——处理将代码库与操作系统相关联的依赖关系实际上是一个相当大的挑战,而 docker 使其完全消失。
实际上,OSX 没有对本机 docker 所需的内核支持,并且无论如何都不能 运行 linux ELF 可执行文件在本地,所以 Docker for Mac 使用 osx-native 虚拟化创建几乎不可见的 linux 实例,osx 端的 docker
可执行文件负责代理到linux 层。但这对用户来说是透明的。
How can I know if and official image is based on another I need, like this case?
通过查看链接到 docker 中心库页面的 docker 文件。在您的情况下,这是 https://github.com/docker-library/php/blob/master/7.2/stretch/apache/Dockerfile 显示其基于 stretch-slim/ 。 Debian stretch-slim 非常适合 docker,因为它很轻,并且不包含一堆与 docker 容器无关的东西。
所以,您所做的看起来不错,而且您的入门也不错。
我确实想提一件事你可能想要考虑。 apt 的工作方式是,当您 apt-get update
时,它会在本地下载大量包元数据。除非您在创建它的同一 运行 命令中删除它 ,否则这些索引文件将位于由该 运行 命令创建的图层中;即使您在后续图层中删除它们,它们占据的 space 仍将是图像的一部分。
所以当你这样做时:
RUN apt-get update && apt-get install -y libmagickwand-dev
RUN pecl install imagick-3.4.3 \
&& docker-php-ext-enable imagick
您最终得到的图像比需要的要大。这就是为什么 docker 的 apt
的规范调用通常看起来更像 the upstream image you're using:
RUN apt-get update && apt-get install -y \
$PHPIZE_DEPS \
ca-certificates \
curl \
xz-utils \
--no-install-recommends && rm -r /var/lib/apt/lists/*
一旦不再需要包元数据,&& rm -r /var/lib/apt/lists/*
就会删除包元数据*在创建它的同一 运行 命令中 * 因此在 运行 时它不会随图像一起提供。这就是您必须再次 apt-get update
的原因。您肯定已经意识到无论如何您都必须这样做才能获得最新的包存储库索引。所以简而言之,在上面 apt
行的末尾添加 && rm ...
是一个很好的做法,并且可以使用你现在拥有的内容。