kubernetes-guide/content/basics/images/podman.md

62 lines
2.3 KiB
Markdown
Raw Normal View History

2023-10-13 13:37:29 +08:00
# 使用 Podman 构建镜像
## 概述
[Podman](https://podman.io/) 是一个类似 docker 的工具,可以运行容器,也可以构建镜像,甚至可以像 docker 一样支持构建多平台镜像。如今 Docker Desktop 已经宣布收费,可以考虑使用 Podman 来替代。
## 安装
参考 [官方安装文档](https://podman.io/getting-started/installation),我使用的是 Mac安装很简单:
```bash
brew install podman
```
由于 podman 是基于 Linux 的,安装在 Mac 需要先启动它的虚拟机:
```bash
podman machine init
podman machine start
```
最后检查下是否 ok:
```bash
podman info
```
## Podman 构建镜像的背后
Podman 构建镜像在背后实际是利用了 [Buildah](https://buildah.io/) 这个工具去构建,只是封装了一层,更容易使用了。
## Podman 构建镜像的方法
`podman build` 基本兼容 `docker build`,所以你可以像使用 docker 一样去使用 podman 构建镜像。
## FAQ
### 未启动虚拟机导致报错
执行 podman 命令是,遇到 `connect: no such file or directory` 的报错:
```bash
$ 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 构建镜像或直接拉取镜像的过程中,遇到这种报错:
```txt
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 代理的环境变量。
## 参考资料
* [Migrating from Docker to Podman](https://marcusnoble.co.uk/2021-09-01-migrating-from-docker-to-podman/)