Skip to content


podman 常用命令

redhat官方链接

bash
sudo apt install podman

pip3 install podman-compose

podman info

podman pull ubuntu:22.04
# 从指定网站拉取镜像
podman pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
# 示例 podman pull hub.atomgit.com/amd64/nginx:1.25.2-perl

# root的镜像存储在/var/lib/containers/storage
# 普通用户的镜像存储在~/.local/share/containers/storage

# 查看镜像
podman image ls
podman images

# 删除镜像,需要指出的是,删除镜像或者容器时,如果使用ID,则只需要写前几个足以区别不同镜像的字符即可
podman image rm <IMAGE NAME or IMAGE ID>
podman rmi <IMAGE NAME or IMAGE ID>
podman ps

# 查看所有容器
podman ps -a

# 停止容器
podman kill <Container ID>

# 删除容器
podman rm <Container ID>

podman system df

podman container ls -a

在podman中,输入容器ID时,可以只输入前面几个字母,做到能区隔即可

我们可以用如下命令运行容器

bash
podman run -it --rm ubuntu:18.04 bash

podman run 就是运行容器的命令,具体格式我们会在 容器 一节进行详细讲解,我们这里简要的说明一下上面用到的参数。

-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。

--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 podman image rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。

ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。

bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash。

正常情况下,我们运行如下命令可以新建并启动一个容器,之后,运行exit可以退出容器并终止运行

bash
podman run -t -i ubuntu:18.04 /bin/bash

podman start [容器ID]

# 进入一个正在运行的容器
podman attach [容器ID]

# 执行容器中的某个程序
podman exec [容器ID] [程序]
# 例如
podman exec [容器ID] /bin/sh -c 'exit 3'; echo $?
# 需要注意的是,使用attach,退出该容器时,容器会停止,exec不会

再比如,如果我们要部署一个网站,可以使用nginx容器

bash
podman run --name nginx-test -p 8080:80 -d hub.
# --name 指定容器名 -p前缀是宿主端口号,后面是容器内部端口 -d 后台运行
# 非root用户不能使用低于1024的宿主机端口

创建pod

pod是一个多个容器的集合,多个容器共享namespace,并允许同pod下的容器的互相通信。

bash
# 查看help
podman pod --help

# 创建空pod,名为demo-pod
podman pod create --name demo-pod

# 教程参考https://devopscube.com/podman-tutorial-beginners/

解决dockerhub无法链接

save&load 镜像

可以通过一个可以正常连接dockerhub的电脑,通过sudo docker pull下载镜像,然后通过如下保存镜像

bash
sudo docker save -o /path/to/myimage.tar myimage:tag
sudo chmod 755 /path/to/myimage.tar

再拷贝到需要运行的电脑上,使用如下load镜像

bash
sudo docker load -i /path/to/myimage.tar

修改registry源(podman为例)

以 root 用户身份,编辑 /etc/containers/registries.conf 文件,来更改默认的系统范围的搜索设置。 以用户身份,创建 $HOME/.config/containers/registries.conf 文件来覆盖系统范围的设置。

bash
# 在registries.conf文件中添加如下内容,使用某些镜像加速域名
unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"]
short-name-mode = "enforcing"

# 在registries.conf文件中添加如下内容,使用本地镜像加速,并禁用tls验证(frp方案选用)
[[registry]]
location="localhost:5000"
insecure=true

自建镜像站

docker registry

直接使用docker-compose部署

yaml
version: '3'
services:
  registry:
    image: registry:latest
    ports:
      - "5010:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./docker_registry/data:/data
    restart: always

举例说明推送镜像

bash
# 拉取openeuler镜像
podman pull openeuler/openeuler

# 查看镜像
podman image ls

# 修改镜像名到局域网ip/registry名
podman tag docker.io/openeuler/openeuler <docker registry局域网ip>:5010/openeuler

# 推送镜像
podman push <docker registry局域网ip>:5010/openeuler --tls-verify=false

# 搜索镜像
podman search <docker registry局域网ip>:5010/openeuler --tls-verify=false