1.容器
2.镜像
3.镜像的实例化-容器
4.容器数据持久化
5.systemd管理容器
1.容器 概念
runtime: 操作系统上面,runtime是APP运行的支撑和运行环境。软件:podman。
容器与runtime,相当于JAVA与JVM之间关系。
runc是Docker开发的容器runtime。
namespace: 容器的空间,进程隔离的。容器里的PID:跟操作系统的PID一样的。
image: 依赖包,就是一个tar包,相当于一个模板,只读。
container: container image运行。
管理工具:
podman:直接管理容器和image。
skopeo:检查、复制、删除、签名镜像。
buildah: 创造新的镜像。
dockefile:image定义工具。
Registry:image存放的地方。
容器OS:
问题:1.src如何创建rpm包,再构建成一个仓库。
2.如何构建一个Yum仓库。
容器规范:OCI Open Container Initiative
2.镜像管理
2.1podman 基本信息
rht-vmctl status all #查看虚拟机
ssh utility #登录
podman ps #查看状态up状态
#1.安装 两种方式:
yum module list container-tools
yum install podman skopeo
podman info #验证
#2.运行docker: dockerd daemon ,root-守护进程;podman 不需要
#3.设置机器的cpu 为2个
virsh setvcpus servera --count 2 --config
rht-vmctl start servera
podman info |less #查看
rootless: #无根用户
registries: #仓库
store: #存储的配置文件
2.2仓库
2.21 仓库的文件位置
用户:.config/containers/registries.conf
全局:/etc/containers/registries.conf
里面配的3个:
网络地址;关键词 [registries.search] 可访问站点网址 :registries[]
http/https;关键词 [registries.insecure] 不安全站点 :registries[]
blocked=false;关键词 [registries.block]多个服务器,是否阻止,:registries[]
网络地址;查找域;
2.22 登录
podman login -u admin -p redhat321 registry.lab.example.com
2.23搜索
podman search registry.lab.example.com
2.24上传下载
podman pull registry.lab.example.com/ubi8/ubi:8.0
podman push registry.lab.example.com/ubi8/ubi:8.0
2.25 查看列表
podman images
2.26 查看镜像信息
#1.网络上的
skopeo inspect docker://registry.lab.example.com/ubi8/ubi
"RepoTags"#标签版本
#2.本地的 查看镜像列表和镜像的内容
podman image #查看命令 显示出子命令
podman images #相当于 podman image ls
podman container inspect #查看
podman image inspect registry.lab.example.com/ubi8/ubi:latest |less
# 显示镜像标签
“RepoTags”:[],
"Cmd":["/bin/bash"], #镜像会跑的命令
“Config”:{
"User":"1001", #用户是1001
"8080/tcp":{}, #用的是TCP协议8080端口
“Evn”:{} #环境变量
}
2.27保存镜像
#1. 保存网络上 保存本地的
podman image save registry.lab.example.com/rhel8/httpd-24 -o httpd-24.tar
podman image save 123 321 213 -o all.tar
#2.删除
podman image rm all.tar
#3.导入
podman image load -i httpd-24.tar
2.28镜像打标签
podman image tag registry.lab.example.com/rhel8/httpd-24 registry.lab.example.com/rhel8/httpd-24:1-105
3.镜像的实例化-容器
3.1 操作:
3.2基本操作
#1.本地已经有image的镜像了
# run :从image创建容器+启动新的容器
podman run registry.lab.example.com/rhel8/httpd-24
#2.查看容器列表
podman ps
#3.容器操作 命令:podman-container 显示出列选项
man podman-container -ls
#4.查看容器内容 根据列选项查看内容
podman container ls --format "{{.Image}} {{.Names}}"
#5.后台运行
podman run -d registry.lab.example.com/rhel8/httpd-24
#6.查看状态为存在的
man podman ps --filter=exited
podman ps -a|grep Exited
#7.删除容器
podman rm 123
podman container prune -a #删除所有停止的容器
podman ps -a
#登录
podman login -u admin -p 123 registry.lab.example.com --tls-verify=false
将终端分配给容器 直接运行容器 默认跑/bin/bash
podman run -it registry.lab.example.com/ubi8/ubi
exit
3.3起名字
podman run -it --name myos registry.lab.example.com/ubi8/ubi
#运行
podman run registry.lab.example.com/ubi8/ubi echo hello world
#删除
podman run --rm registry.lab.example.com/ubi8/ubi echo hello XXXX
3.4 分析容器
#1.查看
#ps
#ps a 看所有的进程 a 表示终端的进程 x后台的进程
#ps axu
ps u &(pgrep httpd)
#查看的是pid的内容
podman container inspect 123
podman container inspect 123|grep Pid
#2.删除
kill -9 5091
#3.查看容器 :logs日志
podman logs -f 123
#写一条bash语句
podman run -d registry.lab.example.com/ubi8/ubi bash -c "while true;do echo sleep 1 and hello world;sleep 2; done "
#4.运行
podman run registry.lab.example.com/ubi8/ubi:latest command -i -t
#5.
podman ps
podman start
3.5重启容器
podman run --name c2 --restart=always registry.lab.example.com/ubi8/ubi
podman ps -a
3.6访问容器 端口映射
# 外部主机端口 访问容器
# root 用户只能绑1024以下的端口
# 普通用户可以使用1024以上的端口
podman port -a
#1.运行
后台去跑 物理端口:容器端口
podman run -d --name myweb -p 8000:8080 registry.lab.example.com/rhel8/httpd-24
podman run -it -d --name myweb2 -p 172.25.250.10:80:8080 registry.lab.example.com/rhel8/httpd-24
curl http:://servera:8000
#2.防火墙tcp端口
firewall-cmd --add-port=8000/tcp -permanet
#3.进到容器中 查看文件内容
podman exec -it myweb1 bash
ls /var/www/html
echo hello world > /var/www/html/index.html
3.7 使用环境变量配置容器
#使用环境变量配置容器
skopeo inspect docker://registry.lab.example.com/rhel8/mariadb-103|grep usage -B1
podman inspect
usage:
#1.查找images
podman images
IMAGE ID
podman run -d 11a444
podman ps -a
podman log
podman logs dis... #查找参数
#1.装mysql数据库 -e环境变量
podman run -d -p 3306:3306 --name mydb -e MYSQL_USER=tang -e MYSQL_PASSWORD=123 -e MYSQL_DATABASE=blog -e MYSQL_ROOT_PASSWORD=123 registry.lab.example.com/rhel8/mariadb-103:latest
podman ps
yum install -y mysql
mysql -u tang -p 123 -h 172.25.250.10
> show databases;
3.8主机与容器间复制文件
podman cp /etc/hosts mydb:/hosts-from-host
podman exec mydb ls /hosts-from-host
3.9自定义容器镜像
#1.新建一个容器 得到Image Id号
#2.打开终端 复制文件
podman cp /etc/yum.repos.d/rhel_dvd.repo 28564:/etc/yum.repos.d
yum install -y net-tools iproute
ip a
#3.提交容器为容器镜像
podman commit 28564 ubi8:net-tools
podman container prune
podman run -it registry.lab.example.com/ubi8/ubi
podman rm -f mydb naughty_carson
yum provides *bin/ip #安装ip命令
yum install -y iproute
3.10容器导出导入
导出
podman export 2839291 -o ubi.tar
导入
podman import ubi.tar
4.容器数据持久化
#1.准备目录:+设置用户身份运行+设置上下文
sudo mkdir /data
sudo chown tang/data
sudo chcon -t container_file_t/data
#2.挂载卷 主机文件挂载到容器文件夹下
podman run -v [src|host-dir]:container-dir[:optins]
#3. -z 所有容器可访问 -Z只有当前容器可访问
podman run -d --name myweb -p 8080:8080 ~/myweb:/var/wwww:Z registry.lab.example.com/rhel8/httpd-24:1-98
curl localhost:8080
5.systemd管理容器
无根(rootless,普通用户)容器创建systemd user unit文件,类似常规服务,用systemctl命令来管理它们。
5.1安装工具
#1.创建成一个服务
#1.1安装工具
sudo yum install -y tigervnc-server
#1.2.创建目录
mkdir -p ~/.config/systemd/user
#1.3.拷贝文件
cp /usr/lib/systemd/user/vncserver@.service ~/.config/systemd/user/
#1.4. 用户启动守护进程
systemctl --user daemon-reload
5.2设置一般用户开机启动
一般的用户服务,开启会话服务启动,关闭会话服务停止。
通过loginctl命令设置用户服务随系统自动启动。
loginctl show-user tang|grep Linger
loginctl enable-linger tang
loginctl disable-linger tang
#1.设置成enable
loginctl show-user tang
loginctl enable-linger tang
ps axu|grep vnc 查所有的进程
5.3 一般用户创建service文件
#1.创建目录
mkdir -p ~/.config/systemd/user/
cd .config/systemd/user/
#2.启动+挂载
podman run -d --name web -p 8000:8080 -v /home/tang/web:/var/wwww/:Z registry.lab.example.com/rhel8/httpd-24
#3. 生成文件 容器名
podman generate systemd --name web
# 目录下生成 container-web.service
podman generate systemd -n web --files
root用户 使用Systemd unit文件管理容器。
a) 在/etc/systemd/system中运行
b)不使用--user
5.4配置主机启动时启动容器
podman ps #查看
podman stop web
systemctl --user daemon-reload #启动守护进程
systemctl --user enable container-web.service #开机启动
systemctl --user enable container-web.service --now #启动
systemctl --user status container-web.service #查看状态