目录
1.Podman的简介
linux中的容器是装应用的
容器就是将软件打包成标准化单元,用于开发、交付和部署
容器技术已经成为应用程序封装和交付的核心技术
优点
– 相比于传统的虚拟化技术,容器更加简洁高效
– 传统虚拟机需要给每个VM安装操作系统
容器使用的共享公共库和程序
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像
Podman有何特点:
1.没有 Daemon (守护进程) 直接通过 OCI runtime(默认也是runc)来启动容器,所以容器的进程是 podman 的子进程;
2.采用类似于Linux中
"fork/exec模型"
相比较于”C/S模型”有一定的优势。3.能够以非 root 用户的身份去运行容器
4.引入注册表的概念其内部包括docker.io在内的多个容器镜像源,默认的有
Podman VS Docker
(1) 模型对比
Podman: fork/exec 模型
Docker: C/S 模型
(2) 启动模式:
前者直接OCI containner runtime(runc)进行交互来创建container的
后者通过API跟 Docker Engine(引擎)请求才会调用OCI container runtime(runc)来启动一个container
(3) 守护进程
前者容器不支持–restart策略但是可以通过编写systemd服务来完成自启动
后者因有docker daemon,所以docker启动的容器支持–restart策略
(4) 权限对比
前者可以非root用户创建容器
后者必须使用root用户来创建容器
注:Podman 在 CentOS 7 的默认 Extras 存储库中可用,在 CentOS 8 和 Stream 的 AppStream 存储库中可用。
虚拟化与容器的区别
• 镜像是启动容器的核心,镜像由镜像仓库提供
• 在podman中容器是基于镜像启动的
• podman和容器的关系
– podman是完整的一套容器管理系统
– podman提供了一组命令,让用户更加方便直接地
使用容器技术,而不需要过多关心底层内核技术
podman所需软件
– 系统软件,位于 rhel-8.2-x86_64-dvd 源中
– 利用系统光盘,构建Yum仓库
2.安装前准备
# 禁用selinux ~]# vim /etc/selinux/config .... SELINUX=disabled ..... # 关闭翻火墙 ~]# systemctl stop firewalld && systemctl disable firewalld ## 搭建yum # 网络tencent,yum ~]# /etc/yum.repos.d [AppStream] name=centos8 baseurl=https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/ enabled=1 gpgcheck=0 [BaseoS] name=centos8 baseurl=https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/ enabled=1 gpgcheck=0 # 搭建本地yum # 挂载光盘并创建挂载点,挂载 ~]# mkdir /dvd && mount /dev/cdrom /dvd # 搭建本地yum ~]# vim /etc/yum.repos.d/dvd.repo [AppStream] name=AppStream baseurl=file:///dvd/AppStream enabled=1 gpgcheck=0 [BaseOS] name=BaseOS baseurl=file:///dvd/BaseOS enabled=1 gpgcheck=0 # 检查 ~]# yum repolist -v .... Loading mirror speeds from cached hostfile Setting up Package Sacks pkgsack time: 0.010 Repo-id : AppStream Repo-name : AppStream Repo-revision: 8.5.2111 Repo-distro-tags: [cpe:/o:centos:centos:8]: CentOS 8 Repo-updated : Fri Dec 31 14:06:52 2021 Repo-pkgs : 6,533 Repo-size : 11 G Repo-baseurl : https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/ Repo-expire : 21,600 second(s) (last: Sun Jan 9 13:17:57 2022) Filter : read-only:present Repo-filename: /etc/yum.repos.d/dvd.repo Repo-id : BaseoS Repo-name : BaseoS Repo-revision: 8.5.2111 Repo-distro-tags: [cpe:/o:centos:centos:8]: CentOS 8 Repo-updated : Fri Dec 31 14:06:31 2021 Repo-pkgs : 1,898 Repo-size : 2.0 G Repo-baseurl : https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/ Repo-expire : 21,600 second(s) (last: Sun Jan 9 13:17:57 2022) Filter : read-only:present Repo-filename: /etc/yum.repos.d/dvd.repo ......
3.安装podman
注:centos7安装之前要安装docker,而8系列则可以直接按装 # 8系列有专门的模块 # 查看module并安装 ~]# yum module list ~]# yum -y module install container-tools
4.镜像的概述与命令管理
1)镜像的名称标识
– 每一个镜像都对应唯一的镜像 id
– 镜像名称(文件名称) + 标签(路径) = 唯一
– 每一个镜像都有标签,如果没写就是默认标签 latest
– 我们在调用镜像的时候,如果没有指定标签也是 latest
命令 | 作用 | 说明示例 |
---|---|---|
podman search 关键字 | 查找镜像(需要能访问互联网) | podman search httpd |
podman pull 镜像名称:标签 | 下载镜像(需要能访问互联网) | podman pull localhost/myos:latest |
podman load -i 备份文件.tar.gz | 导入镜像 | podman load -i /root/httpd.tar.gz |
podman images | 查看镜像 | 查看出镜像id |
podman rmi 镜像名称:镜像标签 | 删除镜像 | podman rmi 2f5 #按照镜像的ID值,删除镜像 podman rmi localhost/myos:nginx #删除镜像 |
示例
# 镜像管理 ~]# podman load -i /root/httpd.tar.gz #导入镜像 ~]# podman images #查看当前有哪些镜像 # 镜像删除(镜像id可以简写但要唯一性)) ~]# podman images #查看当前有哪些镜像 ~]# podman rmi 2f5 #按照镜像的ID值,删除镜像
5.容器的管理命令
命令 | 作用 | 说明示例 |
---|---|---|
podman run -选项 镜像名称:镜像标签 启动命令 | 创建容器 | |
podman ps [ -a 所有容器id ] [ -q 只显示容器 id ] | 查看容器 | |
podman rm 容器id | 删除容器 | podman rm -f nsdweb #强制删除容器,或者先停止容器在删除 |
podman start/stop/restart 容器id | 容器管理命令启动、停止、重启 | |
podman exec -it 容器id 启动命令 | 进入容器 |
run 的选项
– podman help run
– man podman-run
• run = 创建 + 启动 + 进入
podman run 命令的选项
– 选项 -i,交互式
– 选项 -t,终端
– 选项 -d,后台运行
– 选项 -p,端口(本地端口:容器端口)
– 选项 -v,映射文件(本地:/容器文件位置)
– 选项 --name 容器名字
• 启动容器,并进入容器
podman run -it myos:latest /bin/bash
• 可以通过命令行提示符,判定自己是否进入容器了
容器管理命令示例(字段意思我所写的docker容器有写)
# 创建容器 ~]# podman run -it localhost/myos:httpd /bin/bash # 如果创建不了容器则需要创建/etc/resolv.conf文件 ~]# touch /etc/resolv.conf # 查看当前系统容器 ~]# podman ps -a # 利用容器id开启容器(容器id可以简写但要唯一性) ~]# podman start 2b #进入容器 ~]# podman exec -it 2b /bin/bash # 利用容器id停止容器(容器id可以简写但要唯一性) ~]# podman stop 2b # 利用容器id删除容器(容器id可以简写但要唯一性) ~]# podman rm 2b # 创建放入后台 ~]# podman run --name abc01 -itd localhost/myos:httpd /bin/bash
6.对外发布容器示例
• 容器可以与宿主机的端口进行绑定
• 从而把宿主机变成对应的服务,不用关心容器的IP地址
• 我们使用 -p 参数把容器端口和宿主机端口绑定
• 同一宿主机端口只能绑定一个容器服务
• -p [可选IP]:宿主机端口:容器端口
# 把宿主机变成 apache并放入后台 ~]# podman run -itd -p 80:80 myos:httpd # 把宿主机变成 nginx并放入后台 ~]# podman run -itd -p 80:80 myos:nginx # 容器放入后台,绑定端口并设置名字 ~]# podman run --name nsdweb -p 80:80 -itd localhost/myos:httpd /bin/bash
7. 容器共享卷
• podman容器不适合保存任何数据
• podman可以映射宿主机文件或目录到容器中
– 目标对象不存在就自动创建
– 目标对象存在就直接覆盖掉
– 多个容器可以映射同一个目标对象来达到数据共享的目的
• 启动容器时,使用 -v 映射参数
# 格式 ~]# podman run -itd -v 宿主机对象:容器内对象 镜像名称:标签 # 示例 # 创建一个容器放入后台,并映射端口与映射文件 ~]# podman run --name rqweb -p 80:80 -v /opt:/var/www/html -itd localhost/myos:httpd /bin/bash
8.管理系统服务
systemd一个更高效的系统&服务管理器
– 开机服务并行启动,各系统服务间的精确依赖
– 服务目录:/usr/lib/systemd/system/
– 主要管理工具:systemctl
• 管理员服务文件默认路径
– /usr/lib/systemd/system/
• 生成服务启动配置文件
--files:生成文件类型
podman generate systemd --name 容器名 --files
• 重新加载服务启动配置文件
systemctl daemon-reload
示例:
必须是相对路径,当前路径必须是/usr/lib/systemd/system
~]# cd /usr/lib/systemd/system ~]# podman ps -a # 注:容器必须是启动状态,且有名字(-name) # 自动生成container-rqweb.service ~]# podman generate systemd --name rqweb --files ~]# ls container-rqweb.service(其他名字就是 container-(名字).service) container-rqweb.service # 重新加载服务配置文件 ~]# systemctl daemon-reload # 测试 ~]# systemctl stop container-rqweb ~]# systemctl start container-rqweb #设置开机自启 ~]# systemctl enable container-rqweb
注:当前是centos8.2版本系统不完善有可能不成功