前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从 scratch开始构建一个最小化的 Hello World Docker 镜像-docker的镜像源头

从 scratch开始构建一个最小化的 Hello World Docker 镜像-docker的镜像源头

作者头像
井九
发布2024-12-20 09:44:34
发布2024-12-20 09:44:34
15000
代码可运行
举报
文章被收录于专栏:四楼没电梯四楼没电梯
运行总次数:0
代码可运行

在这篇文章中,我们将学习如何从零开始构建一个最小化的 Docker 镜像,基于 scratch 镜像,并在其中运行一个简单的 “Hello World” 程序。

Scratch 是一个空白的基础镜像,适用于构建轻量化、独立的容器。由于 scratch 不包含任何系统工具或库,程序必须是静态编译的,且不依赖于任何外部环境。

步骤概述
  1. 编写一个简单的 “Hello World” 程序
  2. 静态编译程序
  3. 创建 Dockerfile
  4. 构建镜像
  5. 运行镜像
  6. 验证镜像大小

1. 编写一个简单的 “Hello World” 程序

我们首先需要编写一个简单的 “Hello World” 程序,这里我们使用 Go 语言 编写,因为 Go 语言自带静态编译功能,适合在 scratch 镜像中使用。

创建一个名为 hello.go 的文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
复制
// hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

2. 静态编译程序

为了确保程序能够在 scratch 镜像中运行,我们需要将其静态编译成不依赖外部库的二进制文件。

使用 Go 的静态编译命令:

代码语言:javascript
代码运行次数:0
运行
复制
# 编译 Go 程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o hello hello.go

说明

  • CGO_ENABLED=0:禁用 cgo,确保编译生成的程序是静态链接的。
  • GOOS=linuxGOARCH=amd64:指定目标平台为 Linux 和 x86_64 架构。
  • -o hello:指定输出文件名为 hello

3. 创建 Dockerfile

接下来,我们需要创建一个 Dockerfile,从 scratch 镜像开始,并将我们编译好的 hello 程序复制到镜像中。

创建 Dockerfile 文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
复制
# Dockerfile
FROM scratch
COPY hello /hello
CMD ["/hello"]

说明

  • FROM scratch:表示从空白镜像 scratch 开始构建。
  • COPY hello /hello:将本地编译好的 hello 程序复制到容器的根目录。
  • CMD ["/hello"]:指定容器启动时执行 /hello 程序。

4. 构建镜像

运行以下命令构建 Docker 镜像:

代码语言:javascript
代码运行次数:0
运行
复制
docker build -t helloworld-scratch .

说明

  • -t helloworld-scratch:指定镜像的名称为 helloworld-scratch
  • .:表示当前目录是 Dockerfile 所在的目录。

5. 运行镜像

构建完成后,我们可以运行容器来测试它:

代码语言:javascript
代码运行次数:0
运行
复制
docker run --rm helloworld-scratch

说明

  • --rm:容器退出后自动删除容器。
  • helloworld-scratch:指定要运行的镜像名称。

运行后,您应该能看到以下输出:

代码语言:javascript
代码运行次数:0
运行
复制
Hello, World!

6. 验证镜像大小

使用 docker images 查看构建的镜像大小。由于 scratch 是一个非常精简的镜像,最终的镜像大小应该非常小。

代码语言:javascript
代码运行次数:0
运行
复制
docker images helloworld-scratch

输出示例:

代码语言:javascript
代码运行次数:0
运行
复制
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
helloworld-scratch  latest    abcdef123456   10 seconds ago   1.2MB

总结

通过这几个简单的步骤,我们从 scratch 开始,成功构建了一个最小化的 Docker 镜像,并运行了一个 “Hello World” 程序。这个过程展示了如何使用 静态编译最小化镜像 来构建一个高效、轻量的 Docker 容器。

  • 静态编译:确保程序不依赖于宿主机的库或系统工具。
  • scratch 镜像:作为一个空白镜像,极大地减小了镜像的体积。
  • 最小化镜像:我们的镜像只有不到 2MB,适合部署高性能、低资源消耗的应用。

这种方式不仅适用于简单的程序,还可以扩展到更复杂的容器应用,特别是在需要严格控制容器体积和资源消耗的场景中。


📌 推荐工具: 寻找免费好用的在线开发工具?试试 Tool.tushuoit.com!从 App 开发到图像处理,再到 AI 创意工具,这里应有尽有。无需下载安装,随时随地提升您的工作效率。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤概述
  • 1. 编写一个简单的 “Hello World” 程序
  • 2. 静态编译程序
  • 3. 创建 Dockerfile
  • 4. 构建镜像
  • 5. 运行镜像
  • 6. 验证镜像大小
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档