在dockerfile中,如何使用特定于操作系统的命令

时间:2016-01-20 07:06:23

标签: dockerfile

链接: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执行?

1 个答案:

答案 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字节。