目录
1.Podman的简介
2.安装前准备
3.安装podman
4.镜像的概述与命令管理
5.容器的管理命令
6.对外发布容器示例
7. 容器共享卷
8.管理系统服务
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版本系统不完善有可能不成功