基础镜像
所有 Dockerfile 都从基础镜像开始。
基础是镜像扩展的镜像。
它指的是FROM
指令。
FROM debian
在大多数情况下,您无需创建自己的基础镜像。Docker 中心 包含适合用作基础的庞大 Docker 镜像库 image 中。Docker 官方镜像是专门设计为一组经过强化、经过实战检验的镜像,这些镜像 支持各种平台、语言和框架。还有 Docker Verified Publisher 镜像,由受信任的发布合作伙伴创建,并由 Docker 验证。
创建基础镜像
如果您需要完全控制镜像的内容,您可以创建
您自己的基础镜像,或使用
特殊FROM scratch
基础:
FROM scratch
这scratch
image 通常用于创建仅包含的最小镜像
正是应用程序所需要的。请参阅使用 scratch 创建最小基础镜像。
要创建分发基础镜像,您可以使用打包为
一个tar
文件,并使用docker import
.流程
创建自己的基础镜像取决于要创建的 Linux 发行版
包。请参阅使用 tar 创建完整镜像。
使用 scratch 创建最小基础镜像
矜持的、最小的scratch
image 作为
构建容器。使用scratch
向构建过程发出镜像信号
您希望Dockerfile
成为第一个文件系统
图层。
而scratch
出现在 Docker Hub 上的 Docker 存储库中,
您无法拉取、运行它或标记具有 name 的任何镜像scratch
.
相反,您可以在Dockerfile
.
例如,要使用scratch
:
# syntax=docker/dockerfile:1
FROM scratch
ADD hello /
CMD ["/hello"]
假设名为hello
存在于 build 上下文的根目录中。
您可以使用以下内容构建此 Docker 镜像docker build
命令:
$ docker build --tag hello .
要运行新镜像,请使用docker run
命令:
$ docker run --rm hello
此示例镜像只有在hello
二元的
没有任何运行时依赖项。计算机程序往往依赖于
运行时环境中存在的某些其他程序或资源。为
例:
- 编程语言运行时
- 动态链接的 C 库
- CA 证书
在构建基础镜像或任何镜像时,这是
考虑。这就是为什么使用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 的更多信息,请参阅: