目录
一、容器基础概述
1、容器概述
Linux中的容器是装应用的
容器就是将软件打包成标准化单元,用于开发、交付和部署
容器技术已经成为应用程序封装和交付的核心技术
-
(1)、优点:
相比于传统的虚拟化技术,容器更加简洁高效
传统虚拟机需要给每个VM安装操作系统
容器使用的共享公共库和程序
镜像是启动容器的核心,镜像由镜像仓库提供
在podman中容器是基于镜像启动的
(2)、podman和容器的关系
podman是完整的一套容器管理系统
podman提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
(3)、podman所需软件
系统软件,位于 rhel-8.2-x86_64-dvd 源中
利用系统光盘,构建Yum仓库
[root@localhost ~]# yum -y module install container-tools
2、获取镜像
(1)、镜像的名称标识:
每一个镜像都对应唯一的镜像 id
镜像名称(文件名称) + 标签(路径) = 唯一
每一个镜像都有标签,如果没写就是默认标签 latest
我们在调用镜像的时候,如果没有指定标签也是 latest
(2)、查找镜像(需要能访问互联网)
podman search 关键字
podman search httpd
(3)、下载镜像(需要能访问互联网)
podman pull 镜像名称:标签
podman pull localhost/myos:latest
(4)、导入镜像
podman load -i 备份文件.tar.gz
podman load -i /root/httpd.tar.gz
3、镜像管理命令
(1)、查看镜像
podman images
(2)、删除镜像
podman rmi 镜像名称:镜像标签
4、练习
镜像管理练习
]# podman images #查看当前有哪些镜像
]# podman load -i /root/httpd.tar.gz #导入镜像
]# podman load -i /root/nginx.tar.gz #导入镜像
]# podman load -i /root/myos.tar.gz #导入镜像
镜像删除练习
]# podman images #查看当前有哪些镜像
]# podman rmi 2f5 #按照镜像的ID值,删除镜像
]# podman rmi localhost/myos:nginx #删除镜像
]# podman rmi localhost/myos:latest #删除镜像
二、使用容器
1、podman run 命令
podman run -选项 镜像名称:镜像标签 启动命令
查看 run 的选项(帮助信息)
podman help run
man podman-run
run = 创建 + 启动 + 进入 (三合一)
2、podman run 命令的选项
选项 -i,交互式
选项 -t,终端
选项 -d,后台运行
选项 --name 容器名字
—启动容器,并进入容器
[root@rhel8 ~]# podman run -it localhost/myos:httpd /bin/bash
可以通过命令行提示符,判定自己是否进入容器了
3、容器管理命令
(1)、启动容器
podman run –选项 镜像名称:镜像标签 启动命令
(2)、查看容器
podman ps [ -a 所有容器id ] [ -q 只显示容器 id ]
(3)、删除容器
podman rm 容器id
podman rm -f #强制删除
(4)、容器管理命令启动、停止、重启
podman start|stop|restart 容器id
(5)、进入容器
podman exec -it 容器id 启动命令
4、练习
(1)、容器初步练习
]# touch /etc/resolv.conf
]# podman run -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 start 2b #利用容器id开启容器
[root@rhel8 ~]# podman exec -it 2b /bin/bash #进入容器
[root@2b0b7c62ab42 /]# id dc
[root@2b0b7c62ab42 /]# exit
[root@rhel8 ~]# podman ps -a
[root@rhel8 ~]# podman stop 2b #利用容器id停止容器
[root@rhel8 ~]# podman ps -a
[root@rhel8 ~]# podman rm 2b #利用容器id删除容器
[root@rhel8 ~]# podman ps -a
(2)、容器放入后台练习
]# 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
uid=1000(tc) gid=1000(tc) groups=1000(tc)
[root@962aa837e17b /]# exit
[root@rhel8 ~]# podman stop abc01
[root@rhel8 ~]# podman rm abc01
[root@rhel8 ~]# podman ps -a
三、容器进阶-对外发布容器服务
容器可以与宿主机的端口进行绑定
从而把宿主机变成对应的服务,不用关心容器的IP地址
使用 -p 参数把容器端口和宿主机端口绑定
同一宿主机端口只能绑定一个容器服务
-p [可选IP]:宿主机端口:容器端口
例如:把宿主机变成 apache
podman run -d -p 80:80 locahost/myos:httpd
案例:容器放入后台,端口绑定练习
[root@rhel8 ~]# 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]# /usr/sbin/httpd #手动启动
[root@5b69bf6956b0 html]# exit
exit
[root@rhel8 ~]# curl http://192.168.4.100
wo shi nsdweb
四、容器进阶-容器共享卷
思想:类似于NFS,容器挂载了主机的某个目录下,容器始终与主机该文件夹内容保持一致
podman容器不适合保存任何数据,不安全
podman可以映射宿主机文件或目录到容器中:
目标对象不存在就自动创建
目标对象存在就直接覆盖掉
多个容器可以映射同一个目标对象来达到数据共享的目的
启动容器时,使用 -v 映射参数
podman run -it -v 宿主机对象:容器内对象 -d 镜像名称:标签
容器共享卷练习:
]# podman stop nsdweb #停止容器
]# podman rm -f nsdweb #强制删除容器
[root@rhel8 ~]# mkdir /webroot
[root@rhel8 ~]# podman run --name myweb -p 80:80 -v /webroot:/var/www/html -d localhost/myos:httpd
7804e7c1e080c9857d06eb9818fb09fddc59fa08d3622b848cdfbc7997d155eb
[root@rhel8 ~]# echo wo shi hahaha > /webroot/index.html
[root@rhel8 ~]# curl 192.168.4.100
wo shi hahaha
五、容器进阶-管理系统服务(了解)
systemctl ---> system ----> 容器
•systemd一个更高效的系统&服务管理器
–开机服务并行启动,各系统服务间的精确依赖
–服务目录:/usr/lib/systemd/system/
–主要管理工具:systemctl
•管理员服务文件默认路径
–/usr/lib/systemd/system/
•生成服务启动配置文件
--files:生成文件类型
podman generate systemd --name 容器名 --files
•重新加载服务启动配置文件
systemctl daemon-reload
练习:(必须是相对路径,当前路径必须是/usr/lib/systemd/system)
[root@rhel8 ~]# cd /usr/lib/systemd/system
[root@rhel8 system]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED
7804e7c1e080 localhost/myos:httpd /usr/sbin/httpd -... 20 minutes ago
STATUS PORTS NAMES
Up 20 minutes ago 0.0.0.0:80->80/tcp myweb
[root@rhel8 system]# podman generate systemd --name myweb --files #2类似与:配置
/usr/lib/systemd/system/container-myweb.service
[root@rhel8 system]# vim container-myweb.service #文件中书写的配置,感觉这个类似于别名
[root@rhel8 system]# systemctl daemon-reload #重新加载服务配置文件/刷新
[root@rhel8 system]# podman stop myweb #手动停止
[root@rhel8 system]# podman ps -a
[root@rhel8 system]# systemctl start container-myweb.service #3起服务
[root@rhel8 system]# systemctl enable container-myweb #设置开机自启
Created symlink /etc/systemd/system/multi-user.target.wants/container-myweb.service → /usr/lib/systemd/system/container-myweb.service.