了解我的人都知道,我喜欢有趣的事实。在我们的 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 趣味知识,希望你觉得它有用。最后再分享一个趣味知识:大象不会跳!
留下回复