使用 Podman 构建镜像
概述
Podman 是一个类似 docker 的工具,可以运行容器,也可以构建镜像,甚至可以像 docker 一样支持构建多平台镜像。如今 Docker Desktop 已经宣布收费,可以考虑使用 Podman 来替代。
安装
参考 官方安装文档,我使用的是 Mac,安装很简单:
brew install podman
由于 podman 是 基于 Linux 的,安装在 Mac 需要先启动它的虚拟机:
podman machine init
podman machine start
最后检查下是否 ok:
podman info
Podman 构建镜像的背后
Podman 构建镜像在背后实际是利用了 Buildah 这个工具去构建,只是封装了一层,更容易使用了。
Podman 构建镜像的方法
podman build
基本兼容 docker build
,所以你可以像使用 docker 一样去使用 podman 构建镜像。
FAQ
未启动虚拟机导致报错
执行 podman 命令是,遇到 connect: no such file or directory
的报错:
$ podman build --platform=linux/amd64 . -t imroc/crontab:centos -f centos.Dockerfile
Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM
Error: unable to connect to Podman socket: Get "http://d/v4.0.2/libpod/_ping": dial unix ///var/folders/91/dsfxsd7j28z2mxl7vm91mjg40000gn/T/podman-run--1/podman/podman.sock: connect: no such file or directory
通常是因为在非 Linux 的系统上,没有启动 podman linux 虚拟机导致的,启动下就可以了。
代理导致拉取镜像失败
使用 podman 构建镜像或直接拉取镜像的过程中,遇到这种报错:
Error: error creating build container: initializing source docker://centos:8: pinging container registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 127.0.0.1:12639: connect: connection refused
通常是因为启动 podman 虚拟机时,终端上有 HTTP 代理的环境变量,可以销毁虚拟机,重新启动,启动前确保当前终端没有 HTTP 代理的环境变量。