Appearance
podman 常用命令
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