链接:https://docs.docker.com/linux/step_four/
在创建我们自己的图像时,步骤9包含Dockerfile的内容,
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
但是apt-get
是一个特定于OS的命令吗?
我怎么能假设容器(剥离版本的linux)将有apt-get执行?
答案 0 :(得分:0)
您可以使用哪些命令(在本例中为哪个包管理器)取决于图像使用的“基本”图像。
在这种情况下,docker / whalesay映像基于Ubuntu 14.04。可以在Docker Hub上看到用于构建此映像的Dockerfile; https://hub.docker.com/r/docker/whalesay/
FROM ubuntu:14.04
# install cowsay, and move the "default.cow" out of the way so we can overwrite it with "docker.cow"
RUN apt-get update && apt-get install -y cowsay --no-install-recommends && rm -rf /var/lib/apt/lists/* \
&& mv /usr/share/cowsay/cows/default.cow /usr/share/cowsay/cows/orig-default.cow
# "cowsay" installs to /usr/games
ENV PATH $PATH:/usr/games
COPY docker.cow /usr/share/cowsay/cows/
RUN ln -sv /usr/share/cowsay/cows/docker.cow /usr/share/cowsay/cows/default.cow
CMD ["cowboy"]
Ubuntu和Debian是一个受欢迎的选择作为基本图像,大多数官方图像都基于Debian,但你也可以找到基于例如CentOS的图像; https://hub.docker.com/r/centos/mariadb/
基于Ubuntu和CentOS的图像相对较大。大多数情况下,这不是问题,因为图层之间可以共享图层,因此所有基于相同版本(例如)Ubuntu的图像都不需要再次下载这些图层。
Docker镜像通常用于单个服务,Linux的许多部分根本不需要,那么为什么要将它们包括在内呢?因此,您会看到越来越多基于 minimal 分布的图片,例如Alpine。
例如,the official Redis image现在也可以在Alpine变体中使用。它仍然是相同的Redis,具有相同的功能,但与基于Debian的版本相比,尺寸差异很大;
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 3-alpine 56ddc4d21480 6 days ago 15.95 MB
redis 3 d4deec2c521c 12 days ago 151.3 MB
有些图片根本不需要Linux基础;如果静态编译二进制文件,则可以创建一个只包含二进制文件的图像。例如,Hello World图像只包含二进制文件,该图像的总大小为960字节。