一、容器介绍
容器:容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。
也有人称:容器是一种轻量级虚拟化的技术
容器相对于kvm虚拟机的优势:
1、容器能提供接近宿主机的性能,而kvm虚拟机会损害一部分宿主机的性能
2、同样硬件配置的宿主机最多能启动10虚拟机,那么它可以启动100+容器
3、启动一台kvm虚拟机,可以能需要20秒,启动一个容器只需要1秒
4、kvm需要硬件cpu的支持,容器不需要
linux开机启动流程如下:
bios开机硬件自检
根据bios设置的优先启动项
读取mbr引导
加载内核
启动第一个进程/sbin/init
执行系统初始化脚本/etc/rc.d/rc.sysinit完成系统初始化
运行想要的服务sshd
总结:kvm虚拟机运行一个sshd服务需要完整的开机启动流程,容器是直接启动sshd服务,中间的流程全部精简。
容器的发展史:
1)chroot技术
chroot,即change root directory(更改 root 目录),在 linux 系统中,系统默认的目录结构都是以`/`,即是以根 (root) 开始的,而在使用chroot之后,系统的目录结构将以指定的位置作为`/`位置
优势:
增加了系统的安全性,限制了用户的权力:
在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。
建立一个与原系统隔离的系统目录结构,方便用户的开发:
使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。
切换系统的根目录位置,引导 Linux 系统启动以及急救系统等:
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。
2)lxc容器
全称:linux container,通过namespaces 命名空间实现的隔离环境,通过cgroups实现的资源限制,提供类似虚拟机一样的体验。
3)docker容器
早期的docker容器底层就是调用的lxc,后期才换成了自己的libcontainer
搭建chroot环境:centos74
https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/centos/7/amd64/default/20210131_07%3A08/rootfs.tar.xz
cd /opt/centosren
wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/centos/7/amd64/default/20210131_07%3A08/rootfs.tar.xz
[root@bogon centosren]# tar xf rootfs.tar.xz
解压出的文件和根目录下的文件是一样的。
二、lxc容器的安装和使用
lxc是为Ubuntu设计的,如果在Ubuntu上安装,只需安装lxc
安装LXC内核版本不能低于2.6.32,对lxc至此最佳的为Ubuntu系统
lxc容器的依赖:
依赖CentOS-Base.repo和epel.repo
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install epel-release
安装lxc容器(最好先下载好容器,再做桥接,否则网络会出问题):
lxc :lxc相关软件 ;libcgroup 资源管理,限制 ;bridge-utils 管理桥接网卡
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y
yum -y install libvirtd
systemctl start libvirtd
systemctl start lxc
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes BRIDGE=virbr0 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 TYPE=Bridge BOOTPROTO=static NAME=virbr0 DEVICE=virbr0 ONBOOT=yes IPADDR=192.168.23.135 NETMASK=255.255.255.0 GATEWAY=192.168.23.2 DNS1=223.5.5.5
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl restart NetworkManager 只保留network,停掉NM
[root@localhost ~]# ll /etc/systemd/system/ 看看network有没有和NM做超链接,如果没有只保留一个就行
查看网桥信息:brctl show当STP为no时候,要改成yes
brctl stp virbr0 on
删除网桥方法:
[root@localhost ~]# ifconfig virbr0 down [root@localhost ~]# brctl delbr virbr0,最后再删除配置文件
[root@localhost ~]# cat /etc/lxc/default.conf 这里面配置的网卡就是virbr0,所以创建的就是virbr0网卡
https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/
https://mirrors.tuna.tsinghua.edu.cn/help/lxc-images/
创建lxc容器:
lxc-create -n 容器名 -t 模板名
模板目录: /var/cache/lxc/模板名/
-d DIST 发行版本
-r RELEASE 系统版本
-a ARCH架构
方法一:
lxc-create -t download -n centos7 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 7 -a amd64
或lxc-create -t download -n my-container -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images
方法二:lxc-create -t centos -n test
lxc-create -t download -n centos7 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images
模板在:/var/cache/lxc/download/centos/7/amd64/default/
-n centos7这是容器名字
-- --server mirrors.tuna.tsinghua.edu.cn/lxc-images服务器下载地址
[root@localhost ~]# lxc-create -t download -n ubuntu -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images
[root@localhost ~]# du -sh /var/cache/lxc/download/ubuntu/
89M /var/cache/lxc/download/ubuntu/
[root@localhost ~]# chroot /var/lib/lxc/ubuntu/rootfs/ passwd
[root@localhost ~]# du -sh /tmp/tmp.25a9bbkUSI/创建的时候会缓存到这个目录下,下载完就会被删除,会缓存到下面目录下
[root@localhost ~]# du -smh /var/cache/lxc/download/centos/7/amd64/default/
[root@localhost ~]# du -smh /var/cache/lxc/download/centos/8/amd64/default/
设置容器的root用户密码
chroot /var/lib/lxc/centos7/rootfs passwd 密码是rcs**?
启动容器:
lxc-start -n centos7
容器和宿主机共用一个内核
lxc容器的进程:
容器中运行的命令,在宿主机中都可以看到
推荐使用pstree命令来查看,需安装
yum install psmisc.x86_64 -y
lxc容器的系统目录文件:
lxc容器的系统目录文件在宿主机的某一个目录下/var/lib/lxc/容器名/rootfs
启动容器lxc-start -n centos7
关闭容器lxc-stop -n centos7
删除容器lxc-destroy -n centos7
登录出logout
如果stop停不掉,就用kill把进程干掉
lxc-info -n centos7 查看lxc容器相关信息(名称、是否在运行、PID,CPU使用、IO使用、内存使用、IP地址、网络吞吐量)