首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建基本映像(引擎) | Create a base image (Engine)

大多数Dockerfiles从父映像开始。如果您需要完全控制图像的内容,则可能需要创建基本图像。以下是区别:

  • 一个父映像是你的形象是基于图像。它FROM指向Dockerfile中指令的内容。Dockerfile中的每个后续声明都会修改此父图像。大多数Dockerfiles从父映像开始,而不是基本映像。但是,这些术语有时可以互换使用。
  • 一个基本图像要么不具有FROM线在其Dockerfile,或具有FROM scratch

本主题向您展示了创建基础图像的几种方法。具体的过程将在很大程度上取决于你想打包的 Linux发行版。我们在下面有一些例子,并鼓励您提交拉取请求以提供新的请求。

使用tar创建一个完整的图像

一般来说,您需要从一台运行您希望打包为父映像的发行版的工作机器开始,不过对于像 Debian 的 Debootstrap 这样的工具来说,这并不是必需的,您也可以使用它来构建 Ubuntu 映像。

它可以像创建 Ubuntu 父图像一样简单:

代码语言:javascript
复制
$ sudo debootstrap xenial xenial > /dev/null
$ sudo tar -C xenial -c . | docker import - xenial

a29c15f1bf7a

$ docker run xenial cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"

在 Docker GitHub Repo 中有更多用于创建父图像的示例脚本:

使用scratch创建一个简单的父图像

您可以使用 Docker 的保留最小图像scratch作为构建容器的起点。使用scratch“图像”信号构建过程,您希望其中的下一个命令Dockerfile成为图像中的第一个文件系统层。

scratch出现在集线器上的 Docker 存储库中时,您无法将其拉出,运行或标记具有该名称的任何图像scratch。相反,你可以参考你的Dockerfile。例如,要使用scratch以下命令创建最小容器:

代码语言:javascript
复制
FROM scratch
ADD hello /
CMD ["/hello"]

假设您从Docker GitHub示例C源代码构建了“hello”可执行示例,并且使用该-static标记编译了该示例,则可以使用以下命令构建此 Docker 映像:docker build --tag hello .

注意:由于 Docker for Mac 和 Docker for Windows 使用 Linux VM,因此必须使用 Linux 工具链编译此代码,以最终形成 Linux 二进制文件。不用担心,您可以快速下载 Linux 映像和构建环境并在其中构建:

代码语言:javascript
复制
$ docker run --rm -it -v $PWD:/build ubuntu:16.04
container# apt-get update && apt-get install build-essential
container# cd /build
container# gcc -o hello -static -nostartfiles hello.c

然后,您可以使用以下命令运行它(在 Linux,Mac 或 Windows 上): docker run --rm hello

本示例将创建教程中使用的 hello-world 图像。如果你想测试它,你可以克隆图像回购

更多资源

有更多的资源可以帮助你写你的Dockerfile

  • Dockerfile有关参考部分中可用于a的所有说明的完整指南。
  • 为了帮助您编写清晰,可读,可维护的文档Dockerfile,我们还编写了Dockerfile最佳实践指南。
  • 如果您的目标是创建一个新的官方存储库,请务必阅读Docker的官方存储库

扫码关注腾讯云开发者

领取腾讯云代金券