容器通过整合应用程序及其所有依赖项和默认配置文件,简化了应用程序的构建、分发、发现和使用流程。用户只需执行一两条命令即可试用或部署新应用程序,无需遵循冗长的安装说明。
以下是查找首个容器镜像的方法:
podman search docker.io/busybox
输出:
NAME DESCRIPTION docker.io/library/busybox Busybox base image. docker.io/rancher/busybox docker.io/openebs/busybox-client docker.io/antrea/busybox docker.io/hugegraph/busybox test image ...
上一个命令返回了 DockerHub 上公开可用的容器镜像列表。这些容器镜像易于使用,但质量和维护程度参差不齐。我们选用列表中的第一个镜像,因为它似乎维护良好。
要运行 busybox 容器镜像,只需执行单条命令:
podman run -it docker.io/library/busybox
输出:
/ #
你可以花些时间在 busybox 容器里探索一番,但很快就会发现,运行这样一个只包含少量 Linux 实用工具的小容器价值有限,所以退出吧:
exit
有句老话是这样说的:“没有人运行操作系统只是为了运行操作系统”,这句话用在容器上也同样适用。真正有趣且有价值的是运行在操作系统之上或容器之中的工作负载。
有时候,我们能找到一个公开可用的容器镜像,它恰好对应我们要找的工作负载,而且其打包方式也完全符合我们的需求。但更多时候,我们总会有一些想要添加、删除或自定义的内容。这些内容可能简单到只是一个关于安全性或性能的配置设置,也可能复杂到需要添加一个复杂的工作负载。无论哪种情况,容器都能让我们相当轻松地完成所需的修改。
容器镜像并非真正的镜像文件,而是由多个层级组成的存储库。通过容器文件(Dockerfile),这些层级可轻松添加、保存并与他人共享。该单一文件通常包含构建新容器镜像所需的所有指令,并能借助GitHub等工具便捷地公开分享。
以下是如何从位于git仓库中的内容构建容器镜像的示例:
podman build -t hello https://github.com/containers/PodmanHello.git
一旦镜像构建完成,就可以轻松地从本地缓存运行这个新镜像了:
podman run -it hello
输出:
!... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ Project: https://github.com/containers/podman Website: https://podman.io Desktop: https://podman-desktop.io Documents: https://docs.podman.io YouTube: https://youtube.com/@Podman X/Twitter: @Podman_io Mastodon: @Podman_io@fosstodon.org
构建新镜像固然重要,但与他人分享作品才能让大家审视我们的成果,探讨构建方法,并提出改进方案。我们新建的 hello 镜像可发布至 quay.io 或 docker.io 与全球共享。该容器镜像已包含运行 hello 应用所需的一切资源,他人可轻松拉取使用,或在此基础上进行优化。
通过标准化容器镜像和容器注册表,能够实现更简便的协作模式。这种简易使用模式得以实现,是因为所有主流容器引擎和注册服务器均采用开放容器倡议(OCI)格式。这使得用户能够在任意环境中查找、运行、构建、共享和部署容器。Podman及其他容器引擎(如CRI-O、Docker或containerd)均可从docker.io、quay.io、本地注册表乃至云服务商提供的注册表中创建并使用容器镜像。OCI镜像格式通过统一标准促进了整个生态系统的协同运作。
例如,如果我们想在quay.io上分享新构建的hello容器镜像,操作很简单。首先登录 quay:
podman login quay.io
输入:
Username: USERNAME Password: ******** Login Succeeded!
接下来,为镜像打标签,以便我们将其推送到我们的用户账户中:
podman tag localhost/hello quay.io/USERNAME/hello
最后,推送该镜像:
podman push quay.io/USERNAME/hello
输出:
Getting image source signatures Copying blob bf62b9b17289 done | Copying config 17a4bf5a30 done | Writing manifest to image destination
注意,我们已将一个层推送到我们的 registry 中,现在其他人可以共享它了。快速查看一下:
podman inspect quay.io/USERNAME/hello
输出:
[
{
"Id": "17a4bf5a301a374771ac66dd09c33d1d765af5265d20d6b4da7ac578381efd87",
"Digest": "sha256:ee693991b0c8c8c12dfe0e90c25db1b73867e672478fd7a187a2fae31f72531a",
"RepoTags": [
"quay.io/USERNAME/hello:latest",
...简而言之,Podman 使查找、运行、构建和共享容器变得轻松便捷。
查找:无论是从 dockerhub.io 或 quay.io 容器库、内部注册服务器,还是直接从供应商处获取容器,只需几条 podman search 和 podman pull 命令即可轻松完成
运行:轻松使用预构建镜像(内含运行完整应用所需的一切组件),或通过 podman run 命令基于 Linux 发行版基础镜像启动容器
构建:使用 podman build 命令轻松创建新层,无论是微调还是重大改造皆可实现
分享:通过单条 podman push 命令,将新建容器推送到任意目标位置
更多使用场景指南,请参阅我们的教程页面。