每日 Podman 有趣事实 – Git 构建

了解我的人都知道,我喜欢有趣的事实。在我们的 Scrum 会议上,通常在站立会议讨论结束后,我会分享一个有趣的事实。最近,我发现,或者至少是重新发现了一个关于 `podman build` 的有趣事实,我想通过一篇简短的博客文章分享出来。

几周前,Podman 的 build 手册页被报告了一个问题。一位社区成员尝试使用页面上的示例来演示如何从 Git 仓库构建,但失败了。问题在于该仓库是一个私有仓库,并且已被所有者删除。Dan Walsh 要求我为我们的 PodmanHello ASCII 艺术设置一个小 Git 仓库,并更改示例。

我对此竟然可行感到震惊。因此,经过一番尝试,我为 PodmanHello 创建了这个 GitHub 仓库,其中有两个文件对于构建 PodmanHello 容器镜像至关重要。第一个是 Containerfile,它包含所有用于构建镜像的指令。Containerfile 等同于 Dockerfile,如果你喜欢,也可以使用 Dockerfile。第二个是 podman_hello_world.c,它在构建时由 Containerfile 调用,用于创建 ASCII 艺术。

这就是仓库中构建此镜像所需的所有内容。如果你打开仓库,你会看到其他文件,但它们都是管理类型的文件,对于构建 PodmanHello 容器镜像并非必需。

你可能会问,如何从仓库构建?这很简单:`$ podman build -t podmanhello  https://github.com/containers/PodmanHello.git`。就是这样。镜像直接从 GitHub 快速而轻松地构建。

$ podman build -t podmanhello  https://github.com/containers/PodmanHello.git
[1/2] STEP 1/4: FROM docker.io/alpine AS builder
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 7264a8db6415 done  
Copying config 7e01a0d0a1 done  
Writing manifest to image destination
[1/2] STEP 2/4: RUN apk add gcc libc-dev
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
(1/13) Installing libgcc (12.2.1_git20220924-r10)
(2/13) Installing libstdc++ (12.2.1_git20220924-r10)
(3/13) Installing zstd-libs (1.5.5-r4)
(4/13) Installing binutils (2.40-r7)
(5/13) Installing libgomp (12.2.1_git20220924-r10)
(6/13) Installing libatomic (12.2.1_git20220924-r10)
(7/13) Installing gmp (6.2.1-r3)
(8/13) Installing isl26 (0.26-r1)
(9/13) Installing mpfr4 (4.2.0_p12-r0)
(10/13) Installing mpc1 (1.3.1-r1)
(11/13) Installing gcc (12.2.1_git20220924-r10)
(12/13) Installing musl-dev (1.2.4-r1)
(13/13) Installing libc-dev (0.7.2-r5)
Executing busybox-1.36.1-r2.trigger
OK: 150 MiB in 28 packages
--> 526a984ff6d0
[1/2] STEP 3/4: ADD podman_hello_world.c .
--> dd6453348fcb
[1/2] STEP 4/4: RUN gcc -O2 -static -o podman_hello_world podman_hello_world.c
--> a36b2c970179
[2/2] STEP 1/6: FROM scratch
[2/2] STEP 2/6: LABEL maintainer="Podman Maintainers"
--> 4a92878dd636
[2/2] STEP 3/6: LABEL artist="Máirín Ní Ḋuḃṫaiġ, Twitter:@mairin"
--> e8b0807f14fc
[2/2] STEP 4/6: USER 1000
--> ea421942ccc1
[2/2] STEP 5/6: COPY --from=builder podman_hello_world /usr/local/bin/podman_hello_world
--> 5399568f5d01
[2/2] STEP 6/6: CMD ["/usr/local/bin/podman_hello_world"]
[2/2] COMMIT podmanhello
--> 0f598c9c6b0b
Successfully tagged localhost/podmanhello:latest
0f598c9c6b0b8c8b324a1b12490b171635d33d676b14533d350c08a348502a22

然后,运行镜像的另一个简单命令是:`$ podman run podmanhello`

$ podman run podmanhello
!... Hello Podman World ...!

         .--"--.      	 
       / -     - \    	 
  	  / (O)   (O) \   	 
   ~~~| -=(,Y,)=- |    	 
	.---. /`  \   |~~ 	 
 ~/  o  o \~~~~.----. ~~   
  | =(X)= |~  / (O (O) \   
   ~~~~~~~  ~| =(Y_)=-  |   
  ~~~~	  ~~~|   U  	|~~

Project:   https://github.com/containers/podman
Website:   https://podman.org.cn
Documents: https://docs.podman.org.cn
Twitter:   @Podman_io

所以这显然是一个非常简单的例子,但如果你有一个 Containerfile,希望多人使用并且不想到处传递,这将是一个很好的实现方式。所以这就是今天的 Podman 趣味知识,希望你觉得它有用。最后再分享一个趣味知识:大象不会跳!

留下回复

订阅

输入您的电子邮件地址以接收来自本网站的电子邮件更新。

返回

您的消息已发送

警告
警告
警告。

分类


搜索