系列文章目录
RHCSA_5、逻辑卷管理
RHCSA_6、SELinux管理
RHCSA_7、Firewalld、NTP、Crontab
前言
容器的目的:为进程集合提供一个独立的运行环境。
容器与虚拟机在硬件和底层操作系统交互有所不同:
- 虚拟机:
- 使多个操作系统能够同时在一个硬件平台上运行。
- 使用虚拟机监控程序将硬件分为多个虚拟硬件系统,从而允许多个操作系统并行运行。
- 需要一个完整的操作系统环境来支持该应用。
- 容器:
- 直接在操作系统上运行,从而跨系统上的所有容器共享硬件和操作系统资源。这使得应用能够保持轻巧,并快速并行运行。
- 共享相同的操作系统内核,将容器化应用进程与系统的其余进程隔离开,并使用与该内核兼容的软件。
- 需要的硬件资源比虚拟机少得多,这也使其能够快速启动和停止并降低存储要求,而相比容器通常提供的对硬件的访问,访问底屋硬件信息的应用可能需要更直接地访问硬件,这就不合适作为容器运行
一、podman
docker与podman的区别
- docker 需要在我们的系统上运行一个守护进程(docker daemon),而 podman 不需要。
- 因为 docke 有 docker daemon,所以 docker 启动的容器支持–restart 策略,但是 podman不支持,如果在 k8s 中就不存在这个问题,我们可以设置 pod 的重启策略,在系统中我们可以采用编写 systemd 服务来完成自启动
注册表
- 容器注册表是用于存储和检索容器镜像的存储库。
- 红帽通过两个主容器注册表分发认证容器镜像:
registry. redhat.io:适用于基于官方红帽产品的容器。
registry.connect.redhat.com:适用于基于第三方产品的容器
registry.access.redhat.com:旧的注册表 - 容器命名规则 语法:registry_name/user_name/image_name:tag
registry_name是存储镜像的注册表的名称,通常是注册表的完全限定域名。
user_name 表示镜像所属的用户和组织
image_name在用户命名空间必须唯一
tag 标识镜像版本。
[wjh@www ~]$ vim /etc/containers/registries.conf #----容器注册表配置文件
容器命令操作
[wjh@www ~]$ podman login registry.access.redhat.com #----登录容器注册表
Username: redhat
Password:
Login Succeeded!
#------------------
[wjh@www ~]$ podman search rhel7 #----搜索镜像
#------------------
[wjh@www ~]$ podman pull registry.access.redhat.com/rhel7/rhel #----下载镜像
#------------------
[wjh@www ~]$ podman images #----查看容器镜像
#------------------
[wjh@www ~]$ podman run -itd --name rhel7 registry.access.redhat.com/rhel7/rhel /bin/bash #----在后台运行容器
340dd058c92087f664d3a4f23719a7a0a5bcd8a2bc11b9771ec70e3fedfdcbf7
-t == --tty 意思是 pseudo-tty(伪终端)将被分给容器
-i == --interactive 相同。容器接受输入
-d == --detach,表示容器在后台运行(已分离)
--name 设置容器名称。容器名称必须唯一。如果 podman run 命令不包含容器名称, Podman 将生成唯一的随机名称。
/bin/bash 允许交互
#------------------
#-------查看正在运行的容器
podman ps -a 查看正在运行+历史运行过的容器
podman ps -q 查看正在运行的容器 id
podman ps -s 显示运行容器总文件大小
podman ps -l 显示最近创捷容器
podman ps -n 3 最近创键的 3 个容器
podman ps --no-trunc 显示所有描述
#------------------
[wjh@www ~]$ podman exec -it rhel7 /bin/bash #----进入后台容器,退出后容器依旧启动
[root@340dd058c920 /]#
#------------------
[wjh@www ~]$ podman rmi registry.access.redhat.com/rhel7/rhel #----删除镜像
[wjh@www ~]$ podman rm (容器名称/容器id) #----删除容器
二、管理容器即服务
在将数据库或 Web 服务器等服务部署为容器时,通常希望这些容器在服务器启动时自动启
动,所以我们将容器作为 systemd 服务启动和停止,并检查其状态。
- systemd 管理系统服务: 通过 rootless 容器创捷 systemd 用户单元文件,可以使用 systemctl 来管理。若容器 在 rootless 模式中运行,则可以从非特权用户帐户管理这些服务,以提高安全性。
- systemd 管理用户服务: 借助 systemd 用户服务,用户可以为自己的服务创建单元文件,并使用 systemct1 命令管 理这些服务,无需 root 访问权限。
- 当您将用户服务作为非 root 用户启用时, 该服务会在您通过文本或图形控制台或使用SSH 打开第一个会话时自动启动。当您关闭最 后一个会话时,服务停止。此行为与系统服务有所不同,系统服务是在系统启动时启动,在系统关闭时停止;
- 可以通过 loginct1 enable-linger/disable-linger 来改变 启用/禁止用户逗留(相当于保持登录状态)。若没有指定就是当前用户,如果指定了用户名或 UID, 那么系统将会在启动时自动为这些 用户派生出用户管理器,并且在用户登出后继续保持运行。
[wjh@www ~]$ loginctl enable-linger wjh #----允许未登录的用户在后台运行持续时间很长的服务。
#-------------------
[wjh@www ~]$ loginctl show-user wjh #----查看用户当前属性值
UID=1000
GID=1000
Name=wjh
Timestamp=Sun 2022-10-09 19:31:05 CST
TimestampMonotonic=4562203
RuntimePath=/run/user/1000
Service=user@1000.service
Slice=user-1000.slice
Display=7
State=active
Sessions=7
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
Linger=yes
创捷和管理 systemd 用户服务
- 定义 systemd 用户服务,在~/.config/systemd/user/目录来下创捷服务文件。
- 使用 systemct1 --user 命令来控制,但必须在控制台登录或直接通过 ssh 登录。sudo 和 su 不起作用。
- systemctl 守护进程会与 systemctl --user 进程交互。仅当用户首次从控制台或 ssh 登录时,系统才会启动该进程
- podman 生成 systemd 文件有两种方式:
1)生成的容器,在开机时服务启动的时候启动容器,关机时停止它.
2)每次服务启动的时候创建并运行容器,在停止服务时删除容器.
podman 1.6.4 版本不支持–new 参数
比较系统和用户服务的不同
存储自定义单元 | 系统服务 | /etc/systemd/system/unit.service |
---|---|---|
用户服务 | ~/.config/systemd/user/unit.service | |
重新加载单元文件 | 系统服务 | systemctl daemon-reload |
用户服务 | systemctl --user daemon-reload | |
启动和停止服务 | 系统服务 | systemctl start unit 、systemctl stop unit |
用户服务 | systemctl --user start unit、 systemctl --user stop unit | |
自启服务 | 系统服务 | systemctl enable unit |
用户服务 | loginctl enable-linger 、systemctl --user enable unit |
创建 systemd 单元文件
- 创建用户服务存储自定义单元文件目录
[wjh@www ~]$ mkdir -p ~/.config/systemd/user/
- 创建 systemd 单元文件
[wjh@www user]$ podman generate systemd --name rhel7 --files --new
/home/wjh/.config/systemd/user/container-rhel7.service
- 停止删除原本的 http 容器
[wjh@www user]$ podman stop rhel7
340dd058c92087f664d3a4f23719a7a0a5bcd8a2bc11b9771ec70e3fedfdcbf7
[wjh@www user]$ podman rm rhel7
340dd058c92087f664d3a4f23719a7a0a5bcd8a2bc11b9771ec70e3fedfdcbf7
- 启动并启用 container-rhel7 服务
[wjh@www ~]$ loginctl enable-linger wjh
[wjh@www user]$ systemctl --user enable container-rhel7.service --now
- 重启虚拟机验证是否自启动