docker容器以及lxc一

一、容器介绍

容器:容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的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地址、网络吞吐量)

 

posted @ 2021-02-01 23:41  闲云野鹤cs  阅读(1112)  评论(0编辑  收藏  举报