基础镜像
所有 Dockerfile 都从基础镜像开始。
基础是镜像扩展的镜像。
它引用 Dockerfile 中的指令内容。FROM
FROM debian
在大多数情况下,您无需创建自己的基础镜像。Docker 中心 包含适合用作基础的庞大 Docker 镜像库 image 中。Docker 官方镜像是专门设计为一组经过强化、经过实战检验的镜像,这些镜像 支持各种平台、语言和框架。还有 Docker Verified Publisher 镜像,由受信任的发布合作伙伴创建,并由 Docker 验证。
创建基础镜像
如果您需要完全控制镜像的内容,您可以创建
您自己的基础镜像,或使用
特殊基地:FROM scratch
FROM scratch
该镜像通常用于创建仅包含的最小镜像
正是应用程序所需要的。请参阅使用 scratch 创建最小基础镜像。scratch
要创建分发基础镜像,您可以使用打包为
一个文件,然后使用 .流程
创建自己的基础镜像取决于要创建的 Linux 发行版
包。请参阅使用 tar 创建完整镜像。tar
docker import
使用 scratch 创建最小基础镜像
保留的最小镜像作为
构建容器。将镜像信号用于构建过程
您希望 中的下一个命令成为第一个文件系统
图层。scratch
scratch
Dockerfile
虽然出现在 Docker Hub 上的 Docker 存储库中,
您无法提取它、运行它或标记名称为 .
相反,您可以在 .
例如,要使用 :scratch
scratch
Dockerfile
scratch
# syntax=docker/dockerfile:1
FROM scratch
ADD hello /
CMD ["/hello"]
假设 build 上下文的根目录下存在名为 的可执行二进制文件。
您可以使用以下命令构建此 Docker 镜像:hello
docker build
$ docker build --tag hello .
要运行新镜像,请使用以下命令:docker run
$ docker run --rm hello
此示例镜像只能成功执行
没有任何运行时依赖项。计算机程序往往依赖于
运行时环境中存在的某些其他程序或资源。为
例:hello
- 编程语言运行时
- 动态链接的 C 库
- CA 证书
在构建基础镜像或任何镜像时,这是
考虑。这就是为什么使用 can 创建 base 镜像的原因
困难,除了小而简单的程序之外的任何事物。另一方面
在镜像中仅包含您需要的内容也很重要,以便
减小镜像大小和攻击面。FROM scratch
使用 tar 创建完整镜像
通常,从正在运行的工作计算机开始 要打包为基础镜像的发行版,尽管该发行版是 某些工具(如 Debian 的 Debootstrap)不需要, 您还可以使用它来构建 Ubuntu 镜像。
例如,要创建 Ubuntu 基础镜像,请执行以下操作:
$ sudo debootstrap focal focal > /dev/null
$ sudo tar -C focal -c . | docker import - focal
sha256:81ec9a55a92a5618161f68ae691d092bf14d700129093158297b3d01593f4ee3
$ docker run focal cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
Moby GitHub 存储库中提供了更多用于创建基础镜像的示例脚本。
更多资源
有关构建镜像和编写 Dockerfile 的更多信息,请参阅: