今日所需资料:podman与rhel-8.2-x86_64-dvd.iso

  • 设置虚拟机的主机名

[root@localhost ~]# hostnamectl set-hostname rhel8.tedu.cn

或者另一种设置方式
[root@localhost ~]# hostname rhel8.tedu.cn
[root@localhost ~]# echo rhel8.tedu.cn > /etc/hostname
开启一个新的终端验证

  • 关闭所有虚拟机的SELinux

[root@rhel8 ~]# vim /etc/selinux/config
SELINUX=disabled

  • 设置所有虚拟机防火墙

[root@rhel8 ~]# systemctl stop firewalld
[root@rhel8 ~]# systemctl disable firewalld

修改网卡命名规则

[root@rhel8 ~]# ifconfig | head -2
[root@rhel8 ~]# vim /etc/default/grub
…….
GRUB_CMDLINE_LINUX=”……. quiet net.ifnames=0 biosdevname=0
…….
[root@rhel8 ~]#grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file …
done
[root@rhel8 ~]# reboot #重启系统

配置IP地址

[root@rhel8 ~]# nmcli connection add type ethernet ifname eth0 con-name eth0

[root@rhel8 ~]# nmcli connection modify eth0
ipv4.method manual ipv4.addresses 192.168.88.4/24 connection.autoconnect yes

[root@rhel8 ~]# nmcli connection up eth0
[root@rhel8 ~]# ifconfig | head -2


今日所需资料:podman(httpd.tar.gz、myos.tar.gz 、nginx.tar.gz)
真机为Linux: 虚拟机选择网络类型为private1
[root@localhost ~]# scp -r /linux-soft/1/podman/ root@192.168.88.4:/root

真机为windows: 虚拟机选择网络类型为vmnet1
Mobaxterm进行传输

模块化安装:类似于安装一组软件包

[root@rhel8 ~]# yum module list
[root@rhel8 ~]# yum -y module install container-tools

[root@rhel8 ~]# podman —help #查看podman帮助信息

#

容器基础概述

  1. Linux中的容器是装应用的
  2. 容器就是将软件打包成标准化单元,用于开发、交付和部署
  3. 容器技术已经成为应用程序封装和交付的核心技术
  • 优点
    • 相比于传统的虚拟化技术,容器更加简洁高效
    • 传统虚拟机需要给每个VM安装操作系统
    • 容器使用的共享公共库和程序

容器基础、Linux容器管理、podman命令行、管理容器进阶 - 图1

容器基础、Linux容器管理、podman命令行、管理容器进阶 - 图2

  • 镜像是启动容器的核心,镜像由镜像仓库提供
  • 在podman中容器是基于镜像启动的
  • podman和容器的关系

    • podman是完整的一套容器管理系统
    • podman提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
  • podman所需软件

    • 系统软件,位于 rhel-8.2-x86_64-dvd 源中
    • 利用系统光盘,构建Yum仓库

[root@localhost ~]# yum -y module install container-tools

  • 获取镜像
  • 镜像的名称标识

    • 每一个镜像都对应唯一的镜像 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
  • 删除镜像
    • podman rmi 镜像名称:镜像标签
  • 镜像管理练习

]# podman images #查看当前有哪些镜像
]# podman load -i /root/httpd.tar.gz #导入镜像
]# podman images #查看当前有哪些镜像
]# podman load -i /root/nginx.tar.gz #导入镜像
]# podman load -i /root/myos.tar.gz #导入镜像
]# podman images #查看当前有哪些镜像

  • 镜像删除练习

]# podman images #查看当前有哪些镜像
]# podman rmi 2f5 #按照镜像的ID值,删除镜像
]# podman images #查看当前有哪些镜像
]# podman load -i /root/myos.tar.gz #导入镜像
]# podman images #查看当前有哪些镜像

]# podman images #查看当前系统可以使用的镜像
]# podman rmi localhost/myos:nginx #删除镜像
]# podman images

]# podman rmi localhost/myos:latest #删除镜像
]# podman images

使用容器

  • podman run 命令
    • podman run -选项 镜像名称:镜像标签 启动命令
  • 查看 run 的选项
    • podman help run
    • man podman-run
  • run = 创建 + 启动 + 进入
  • podman run 命令的选项
    • 选项 -i,交互式
    • 选项 -t,终端
    • 选项 -d,后台运行
    • 选项 —name 容器名字
  • 启动容器,并进入容器

podman run -it myos:latest /bin/bash

  • 可以通过命令行提示符,判定自己是否进入容器了

容器管理命令

  • 启动容器
    • podman run –选项 镜像名称:镜像标签 启动命令
  • 查看容器
    • podman ps [ -a 所有容器id ] [ -q 只显示容器 id ]
  • 删除容器
    • podman rm 容器id
  • 容器管理命令启动、停止、重启
    • podman start|stop|restart 容器id
  • 进入容器

    • podman exec -it 容器id 启动命令
  • 容器初步练习

]# touch /etc/resolv.conf
]# podman run —name abc01 -it localhost/myos:httpd /bin/bash

[root@2b0b7c62ab42 /]# cat /etc/redhat-release
[root@2b0b7c62ab42 /]# useradd dc
[root@2b0b7c62ab42 /]# id dc
[root@2b0b7c62ab42 /]# exit #退出容器

[root@rhel8 ~]# podman ps -a #查看当前系统容器
[root@rhel8 ~]# podman rm -f abc01 #强制删除容器abc01

容器放入后台练习

]# podman rm -f abc01 #强制删除容器abc01
]# podman run —name abc01 -d localhost/myos:httpd

]# podman ps -a #查看当前系统有哪些容器
]# podman exec -it abc01 /bin/bash #进入abc01容器
[root@962aa837e17b /]# useradd tc
[root@962aa837e17b /]# id tc
[root@962aa837e17b /]# exit

]# podman ps -a #查看当前系统有哪些容器
]# podman exec -it abc01 /bin/bash #进入abc01容器
[root@962aa837e17b /]# id tc
[root@962aa837e17b /]# exit
]# podman ps -a #查看当前系统有哪些容器
]# podman rm -f abc01 #强制删除容器abc01

  1. 容器进阶-对外发布容器服务
  • 容器可以与宿主机的端口进行绑定
  • 从而把宿主机变成对应的服务,不用关心容器的IP地址

  • 我们使用 -p 参数把容器端口和宿主机端口绑定

  • 同一宿主机端口只能绑定一个容器服务
  • -p [可选IP]:宿主机端口:容器端口
  • 例如:把宿主机变成 apache

podman run -d -p 80:80 myos:httpd

  • 例如:把宿主机变成 nginx

podman run -d -p 80:80 myos:nginx

  • 容器放入后台,端口绑定练习

]# podman run —name nsdweb -p 80:80 -d localhost/myos:httpd

[root@rhel8 ~]# podman ps -a
[root@rhel8 ~]# podman exec -it nsdweb /bin/bash

[root@5b69bf6956b0 html]# echo wo shi nsdweb > /var/www/html/index.html
[root@5b69bf6956b0 html]# exit
exit

[root@rhel8 ~]# curl 192.168.88.4
wo shi nsdweb
[root@rhel8 ~]#

  1. 容器进阶-容器共享卷
  • podman容器不适合保存任何数据
  • podman可以映射宿主机文件或目录到容器中
    • 目标对象不存在就自动创建
    • 目标对象存在就直接覆盖掉
    • 多个容器可以映射同一个目标对象来达到数据共享的目的
  • 启动容器时,使用 -v 映射参数

podman run -itd -v 宿主机对象:容器内对象 镜像名称:标签

  • 容器终极练习

]# podman rm -f nsdweb #强制删除容器
]# mkdir /webroot
]# echo wo shi niuniu > /webroot/index.html

]# podman run —name nsdweb -p 80:80 -v /webroot:/var/www/html -d localhost/myos:httpd

[root@rhel8 ~]# curl 192.168.88.4
wo shi niuniu

  1. 容器进阶-管理系统服务(了解)
  • systemd一个更高效的系统&服务管理器
    • 开机服务并行启动,各系统服务间的精确依赖
    • 服务目录:/usr/lib/systemd/system/
    • 主要管理工具:systemctl

手动方式:
podman start nsdweb #启动容器
podman stop nsdweb #停止容器
systemd方式:
systemctl start nsdweb #启动容器
systemctl stop nsdweb #停止容器

systemd管理方式思路:
用户—systemctl—》systemd—服务配置文件—》容器启动

  • 管理员服务文件默认路径
    • /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
]# podman generate systemd —name nsdweb —files
]# vim container-nsdweb.service
]# systemctl daemon-reload #重新加载服务配置文件
]# systemctl daemon-reload

]# podman stop nsdweb
]# podman ps -a
]# systemctl start container-nsdweb
]# podman ps -a
]# systemctl enable container-nsdweb #设置开机自启