Podman每日趣事 - Git 构建

正如了解我的人所知,我热爱趣事。在我们的 Scrum 会议上,我通常会在完成每日站立会议后分享一个趣事。最近,我发现(或者至少是重新发现)了一个关于 `podman build` 的趣事,我认为应该在博客中简要分享一下。

几周前,有人报告了 Podman 构建手册页面的一个问题。一位社区成员尝试使用页面上展示的从 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 的有趣信息,我希望您觉得它有用。最后,再分享一个趣事:大象不能跳!

留下回复

订阅

使用您的电子邮件地址注册,以便通过电子邮件接收来自此网站的更新。


类别


搜索