赞
踩
- Linux中的容器是装应用的
- 容器就是将软件打包成标注化单元,用于开发、交付和部署
- 容器技术已经成为应用程序封装和交付的核心技术
1.优点
- 相比于传统的虚拟化技术,容器更加简洁高效
- 传统虚拟机需要给每个VM安装操作系统
- 容器使用的共享公共库和程序
2.缺点
- 容器的隔离性没有虚拟化强
- 共用Linux内核,安全性有先天缺陷
1.podman和容器的关系:
- podman是完整的一套容器管理系统
- podman提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
[root@localhost ~]# yum -y install podman
1.镜像是启动容器的核心
- 镜像可以从官方镜像库下载,也可以自己制作
2.在podman中容器是基于镜像启动的
3.镜像采用分层设计
4.使用COW技术
docker.io、quay.io
指定镜像的方法:
- 每一个镜像都对应唯一的镜像id
- 镜像名称(文件名称)+标签(路径) == 唯一
- 每一个镜像都有标签,如果没写就是默认标签 latest
- 我们在调用镜像的时候,如果没有指定标签也是latest
podman images #查看本机镜像
- 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 search #查找镜像
- podman rmi 镜像名称:镜像标签 #删除镜像
- podman run 命令 #运行容器 run = 创建 + 启动 + 进入
- 格式:podman run -选项 镜像名称:镜像标签 启动命令
- 查看run的选项
- podman help run
- man podman-run
- 命令常用参数:
- -i:交互式
- -t:终端
- -d:后台运行
- --name:容器名字
- 案例:
- [root@localhost ~]# podman pull docker.io/library/httpd #下载镜像
- [root@localhost ~]# podman images #查看镜像
- REPOSITORY TAG IMAGE ID CREATED SIZE
- docker.io/library/httpd latest c30a46771695 2 weeks ago 148 MB
- [root@localhost ~]# podman run -it c30 /bin/bash #运行容器,前台运行必须加解释器、后台不用
podman run -选项 镜像名称:镜像标签 启动命令
podman ps [-a 所有容器id] [-q 只显示容器id]
podman rm 容器id
podman start | stop | restart 容器id
podman exec -it 容器id 启动命令
1、默认容器可以访问外网
2、但外部网络的主机不可以访问容器内的资源
3、容器每次创建IP地址都会改变
4、解决这个问题的最佳方法是端口绑定
5、容器可以与宿主机的端口进行绑定
6、从而把宿主机变成对应的服务,不用关心容器的IP地址
1、使用 -p 参数把容器端口和宿主机端口绑定
2、同一宿主机端口只能绑定一个容器服务
3、-p [可选IP]:宿主机端口:容器端口
4、案例:把宿主机变成apache
podman run -d -p 80:80 myos:httpd
1、podman容器不适合保存任何数据 2、数据文件与配置文件频繁更改 3、修改多个容器中的数据非常困难 4、多容器之间有数据共享、同步需求 5、重要数据在容器内不方便管理易丢失 6、解决这些问题请使用主机卷映射功能
1、podman可以映射宿主机文件或目录到容器中 - 目标对象不存在就自动创建 - 目标对象存在就直接覆盖掉 - 多个容器可以映射同一个目标对象来达到数据共享的目的 2、启动容器时,使用-v 映射参数(可有多个) - podman run -itd -v 宿主机对象:容器内对象 镜像名称:标签
- [root@localhost ~]# podman run -itd --name myweb c30a46771695 #启动后端容器
- [root@localhost ~]# podman inspect myweb | grep "IPAddress.:" | awk -F'"' '{print $4}' #查看后端容器ip
- [root@localhost ~]# mkdir /var/webroot #新建目录
- [root@localhost ~]# echo TestApache > /var/webroot/index.html #编写网页测试文件
- [root@localhost ~]# podman run -itd --name httpd -p 80:80 -v /var/webroot/:/usr/local/apache2/htdocs/ c30a46771695 #映射卷完成、并启动容器
- [root@localhost ~]# podman exec -it httpd /bin/bash #进入容器
- root@3fbd2dc5c49e:/usr/local/apache2# find / -name "index.html" #查询网页文件位置
- /usr/local/apache2/htdocs/index.html #实际位置
- [root@localhost ~]# curl 127.0.0.1 #验证
-
- 踩坑记:
- 默认apache网页根目录是/var/www/html/,经过启动容器后查询发现根目录改变,因此卷映射处要改成实际映射的目录
1.一个更高效的系统&服务管理器
- 开机服务并行启动,各系统服务间的精确依赖
- 服务目录:/usr/lib/systemd/system/
- 主要管理工具:systemctl
1.管理员服务文件默认路径
- /usr/lib/systemd/system/
2.生成服务启动配置文件
--files:生成文件类型
podman generate systemd --name 容器名 --files
3.重新加载服务启动配置文件
systemctl daemon-reload
- 将容器配置成systemd管理的服务
- [root@localhost ~]# cd /usr/lib/systemd/system/ #进入服务目录
- [root@localhost system]# podman generate systemd --name httpd --files #建立服务文件
- /usr/lib/systemd/system/container-httpd.service
- [root@localhost system]# systemctl daemon-reload #重新加载服务文件
- [root@localhost system]# systemctl enable container-httpd.service #设置开机自启
- Created symlink from /etc/systemd/system/multi-user.target.wants/container-httpd.service to /usr/lib/systemd/system/container-httpd.service
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。