虚拟化云计算-podman学习笔记

时间:2022-02-01 01:20:01

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学习笔记


镜像拉取好了后,注入变量运行

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

虚拟化云计算-podman学习笔记


通过mysql客户端连接

mysql -uroot -ptest123 -h10.88.0.2

虚拟化云计算-podman学习笔记

可以看到能够正确连接到容器中,也创建了一个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