Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
安装配置podman
#安装
yum install podman -y
#查看镜像
podman images
#查看容器
podman ps
常用命令
#容器相关命令
podman run 创建并启动容器
podman start #启动容器
podman ps #查看容器
podman stop #终止容器
podman restart #重启容器
podman attach #进入容器
podman exec #进入容器
podman export #导出容器
podman import #导入容器快照
podman rm #删除容器
podman logs #查看日志
#镜像相关命令
podman search #检索镜像
docke pull #获取镜像
podman images #列出镜像
podman image Is #列出镜像
podman rmi #删除镜像
podman image rm #删除镜像
podman save #导出镜像
podman load #导入镜像
podmanfile #定制镜像(三个)
podman build #构建镜像
podman run #运行镜像
podmanfile #常用指令(四个)
COPY #复制文件
ADD #高级复制
CMD #容器启动命令
ENV #环境变量
EXPOSE #暴露端口
修改国内源
cat /etc/containers/registries.conf
#按照如下配置
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "hub-mirror.c.163.com" #加速器配置
完成配置文件要注意,unqualified-search-registries之前的行都要注释掉,不然就会报错mixing sysregistry v1/v2 is not supported
检查配置,下载镜像测试
#检查配置
podman info --debug
#下载镜像测试
podman pull docke.io/nginx
以下是几个常用的国内镜像加速器
docker官方中国区: https://registry.docker-cn.com
网易: http://hub-mirror.c.163.com
USTC: http://docker.mirrors.ustc.edu.cn
阿里云: http://<你的ID>.mirror.aliyuncs.com
镜像管理
镜像命名
一般情况下,镜像的命名格式如下:
服务器IP:端口/分类/镜像名:tag
如果不指定端口则默认是80,如果不指定tag,默认是lastest
查看系统当前有多少镜像
podman images
对镜像重新做标签
如果想给本地已经存在的镜像重新命名,可以使用tag
podman tag 旧的镜像名 新的镜像名
#举例
podman tag docker.io/library/mysql 192.168.26.101/rhce/mysql:v2
删除镜像
podman rmi 镜像名:tag
#举例
podman rmi 192.168.26.101/rhce/mysql:v2
查看镜像构建
podman history 镜像名
#举例
podman history hub.c.163.com/library/centos
导出导入镜像
一些服务器是无法连接到互联网的,所以无法从互联网上下载镜像。可以使用导入导出来分发镜像
podman save 镜像名 > file.tar #导出
podman load -i file.tar #导入
#举例
podman save dokcer.io/library/nginx > nginx.tar
podman load -i nginx.tar
podman容器的生命周期
#查看运行的容器
podman ps -a
#运行一个容器
podman run hub.c.163.com/library/centos
#删除容器
podman rm 455391d81738
#强制删除正在运行的容器
podman rm -f 455391d81738
#进入运行的容器
podman run -it hub.c.163.com/library/centos
#容器后台一直运行,并命名位test1
podman run -dit --restart=always hub.c.163.com/library/centos -name test1 hub.c.163.com/library/centos
#指定容器运行的命令,此时进入容器
podman run -it --name=c1 hub.c.163.com/library/centos sh
#创建容器使用的变量
podman run -it --name=c1 -rm -e aa=123 -e bb=456
#把容器的端口映射到物理机上
podman run -d --name=web --restart=always -p 80 docker.io/nginx
#把容器的指定端口映射物理机上,如容器的88端口映射到80端口
podman run -d --name=web --restart=always -p 88:80 docker.io/nginx
创建一个mysql容器
测试案例,使用podman创建一个mysql容器,创建该容器的时候,需要指定一个变量MYSQL_ROOT_PASSWORD来指定root密码,其他变量如MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE都是可选的变量
首先下载一个mysql基础镜像,并检查镜像构建
podman pull hub.c.163.com/library/mysql
podman histroy hub.c.163.com/library/mysql
镜像拉取好了后,注入变量运行
podman run -d --name=db --restart=always -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=blog hub.c.163.com/library/mysql
通过podman检查运行ip
podman inspect db | grep -i ipaddr
通过mysql客户端连接
mysql -uroot -ptest123 -h10.88.0.2
可以看到能够正确连接到容器中,也创建了一个blog的库。
容器管理
#容器中执行指定的命令
podman exec 容器名 命令
#执行命令
podman exec -it db ip a| grep 'inet'
#拷贝文件
podman cp /path/file 容器:/path2 #把物理机中/path/file拷贝到容器的path2中
podman cp 容器:/path2/file /path/ #把容器中的/path2/file拷贝到物理机的/path2中
#关闭,启动,重启
podman stop db
podman start db
podman restart db
#查看容器运行的进程
podman top db
#查看容器日志
podman logs -f db
#查看容器的属性
podman inspect db
#挂载数据卷
# -v dir1 把物理机的一个随机目录映射到容器的/dir1目录中
#-v dir2:/dir1:Z 把物理机的指定目录/dir2映射到容器的/dir1目录中
podman run -dit --name=c1 --restart=always -v /data hub.c.163.com/library/centos #容器中创建一个/data目录随机挂载到物理机一个目录中
#创建一个名为c1的容器,把物理机的目录/data/test映射挂载到容器的/data目录中
podman run -dit --name=c1 --restart=always -v /data/test:/data:Z hub.c.163.com/library/centos
#Z的含义是把物理机的目录/data/test的上下文改成contianer_file_t
#查看物理机对应的目录
podman inspect c1 | grep -A5 Mounts