docker & LXC
目录一、LXC1、了解Docker的前生LXC2、LXC与docker的关系3、与传统虚拟化对比4、LXC部署4.1、安装LXC软件包和依赖包4.2、启动服务4.3、创建虚拟机5、LXC常用命令二、doker1、什么是docker2、docker的由来3、docker的组成架构2、docker官方文档一、LXC1、了解Docker的前生LXCLXC为Linux Container的简写。可以提供轻
目录
一、LXC
1、了解Docker的前生LXC
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。
与传统虚拟化技术相比,它的优势在于:
(1)与宿主机使用同一个内核,性能损耗小;
(2)不需要指令级模拟;
(3)不需要即时(Just-in-time)编译;
(4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
(5)避免了准虚拟化和系统调用替换中的复杂性;
(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
总结:Linux Container是一种轻量级的虚拟化的手段。
Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。
2、LXC与docker的关系
docker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。
在LXC的基础之上,docker提供了一系列更强大的功能。
3、与传统虚拟化对比
不同于vmware,kvm等虚拟化技术,它是一种类似chroot的容器技术,非常的轻量级。
与传统的硬件虚拟化技术相比有以下优势:
a、更小的虚拟化开销。Linux内核本身是一个很好的硬件资源调度器,LXC的诸多特性基本由内核提供,而内核实现这些特性只有极少的花费,CPU,内存,硬盘都是直接使用。
b、更快的启动速度。lxc容器技术将操作系统抽象到了一个新的高度。直接从init启动,省去了硬件自检、grub引导、加载内核、加载驱动等传统启动项目,因此启动飞速。
c、更快速的部署。lxc与带cow特性的后端文件系统相结合,一旦建好了模板,利用快照功能,半秒钟即可实现克隆一台lxc虚拟机。LXC虚拟机本质上只是宿主机上的一个目录,这也为备份和迁移提供了极大便利。
d、更高内存使用效率。普通虚拟机一般会独占一段内存,即使闲置,其他虚拟机也无法使用,例如KVM。而容器可以只有一个内存上限,没有下限。如果它只使用1MB内存,那么它只占用宿主机1MB内存。宿主机可以将富余内存作为他用。
4、LXC部署
4.1、安装LXC软件包和依赖包
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install lxc lxc-templates bridge-utils lxc-libs libcgroup libvirt
包名 | · |
---|---|
lxc | 主程序包 |
lxc-templates | lxc的配置模板 |
bridge-utils | 网桥管理工具 |
lxc-libs | lxc所需的库文件 |
libcgroup | cgroup是为Linux内核提供任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。 |
libvirt | 管理Linux的虚拟化功能所需的服务器端守护程序。 需要针对特定驱动程序的管理程序。 |
注:如果要创建debian系列的主机需要再安装一个软件包:debootstrap
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@localhost network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3fcc157d-5ba6-4cec-8c10-b76cd96df174
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 #连接桥设备
[root@localhost network-scripts]# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.235.160
NETMASK=255.255.255.0
GATEWAY=192.168.235.2
4.2、启动服务
[root@localhost ~]# systemctl start lxc
[root@localhost ~]# systemctl status lxc
● lxc.service - LXC Container Initialization and Autoboot Code
Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled; vendor preset: disabled)
Active: active (exited) since Tue 2021-11-30 18:32:30 CST; 5s ago
Docs: man:lxc-autostart
man:lxc
Process: 52455 ExecStart=/usr/libexec/lxc/lxc-containers start (code=exited, status=0/SUCCES>
Process: 52453 ExecStartPre=/usr/libexec/lxc/lxc-apparmor-load (code=exited, status=0/SUCCES>
Main PID: 52455 (code=exited, status=0/SUCCESS)
11月 30 18:32:30 localhost.localdomain systemd[1]: Starting LXC Container Initialization and A>
11月 30 18:32:30 localhost.localdomain systemd[1]: Started LXC Container Initialization and Au>
lines 1-11/11 (END)
4.3、创建虚拟机
lxc为创建虚拟机提供了模板文件,它们位于/usr/share/lxc/templates目录中。其中的lxc-centos即为创建lxc centos系统的模板。
另外,lxc为虚拟机提供的默认配置文件为/etc/lxc/default.conf,其中使用的桥接接口名称为virbr0,此与前面的创建的接口名称不一致,因此需要作出修改。
当然,也可以将此文件复制之后进行修改,并以为作为接下来的要创建的centos虚拟机的专用配置文件。修改后的default.conf如下所示。
[root@localhost ~]# ls /usr/share/lxc/templates/
lxc-busybox lxc-download lxc-local lxc-oci
//检查lxc运行环境
[root@localhost ~]# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.18.0-257.el8.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Warning: newuidmap is not setuid-root
Warning: newgidmap is not setuid-root
Network namespace: enabled
--- Control groups ---
Cgroups: enabled
Cgroup v1 mount points:
/sys/fs/cgroup/systemd
/sys/fs/cgroup/blkio
/sys/fs/cgroup/net_cls,net_prio
/sys/fs/cgroup/perf_event
/sys/fs/cgroup/freezer
/sys/fs/cgroup/cpu,cpuacct
/sys/fs/cgroup/cpuset
/sys/fs/cgroup/memory
/sys/fs/cgroup/pids
/sys/fs/cgroup/rdma
/sys/fs/cgroup/hugetlb
/sys/fs/cgroup/devices
Cgroup v2 mount points:
Cgroup v1 clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled, not loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, loaded
CONFIG_NF_NAT_IPV4: missing
CONFIG_NF_NAT_IPV6: missing
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, loaded
--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities:
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
[root@localhost ~]# cp /etc/lxc/{default.conf,default.conf.bak}
// 把lxc.network.link 改为前面配置的br0
[root@localhost ~]# vi /etc/lxc/default.conf
[root@localhost ~]# cat /etc/lxc/default.conf
lxc.net.0.type = veth
lxc.net.0.link = br0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
5、LXC常用命令
-
lxc-checkconfig
检查系统环境是否满足容器使用要求; -
lxc-create
创建lxc容器;
格式:lxc-create -n NAME -t TEMPLATE_NAME -
lxc-start
启动容器;
格式:lxc-start -n NAME -d -
lxc-info
查看容器相关的信息;
格式:lxc-info -n NAME -
lxc-console
附加至指定容器的控制台;
格式:lxc-console -n NAME -t NUMBER -
lxc-stop
停止容器; -
lxc-destory
删除处于停机状态的容器; -
lxc-snapshot
创建和恢复快照; -
退出容器方式:<Ctrl+a q>
二、doker
1、什么是docker
Docker是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 基于go语言开发并遵循了apache2.0协议开源。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。
2、docker的由来
2010年dotCloud公司在旧金山成立,PAAS平台的服务供应商;2013年dotCloud更名为Docker股份有限公司(Docker,Inc)。Docker公司专注开源容器引擎的开发,他们的容器引擎产品就叫docker,基于go语言,并遵从Apache2.0协议。Docker是目前最火的LXC高级容器管理引擎。
3、docker的组成架构
Docker 客户端 - Client
Docker 服务器 - Docker daemon
Docker 镜像 - Image
Docker 仓库 - Registry
Docker 容器 - Container
2、docker官方文档
更多推荐
所有评论(0)