LXC、docker

docker是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。

Docker容器是一个完整的文件系统,这个文件系统中包含了你的软件运行所需要的全部环境,如:软件的源码、运行环境、所需的软件等。

Docker技术发展历程

2011年 — Warden:由CloudFoundry公司于2011年所建立,其利用LXC 作为初始阶段,随后又将其替换为自家实现方案。与LXC不同,Warden并不会与Linux紧密耦合。相反,其能够运行在任意能够提供多种隔离环境方式的操作系统之上
2013年 — LMCTFY:“Let Me Contain That For You(帮你实现容器化)”。它其实属于谷歌容器技术堆栈的开源版本,负责提供Linux应用程序容器,Kubernetes目前所使用的cAdvisor工具最初就来源于lmctfy项目
2013年 — Docker:起步阶段使用LXC,而后利用自己的libcontainer库将其替换下来。与其它容器平台不同,Docker引入了一整套与容器管理相关的生态系统。其中包括一套高效的分层式容器镜像模型、一套全局及本地容器注册表、一个精简化REST API以及一套命令行界面等等。在后期发展阶段,Docker公司还构建起一套名为Docker Swarm的容器集群管理解决方案
2014年 — Rocket:解决部分Docker当中存在的缺陷,开发目标是在安全性与生产要求满足能力上超越Docker,其基于App Container规范并使其成为一项更为开放的标准
2015年—Docker进行大家视线,开源社区得到前所未有的发展
2016年 — Windows容器发布,docker新技术架构升级
2017年—Docker:正式进行商业化运作,docker与moby分家
2018年-Docker在企业中快速落地

容器与虚拟机的区别

容器为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。容器技术使用了namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。此外容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。

对于系统虚拟化技术来说,虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。CPU虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的CPU、内存和IO设备资源

基于docker容器虚拟化与传统虚拟化对比

Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化

集装箱化的优点
灵活:即使是复杂的应用程序也可封装。
轻量级:容器利用并共享主机内核。
便携式:您可以在本地构建,部署到云上并在任何地方运行。
可扩展性:您可以增加和自动分发容器副本。
可堆叠:您可以垂直堆叠服务并及时并及时堆叠服务。

docker发布流程:

软件包->打包带上环境(镜像)->Docker仓库:商店->下载发布的镜像->直接运行可用

docker的机制很好的解决了这些问题
docker源于集装箱的思想,自带隔离机制,容器与容器之间互不干扰
一次构建,随处运行。docker可以将写好镜像文件进行打包到任何docker服务中去运行,这个源于docker的容器格式:Docker引擎将名称空间、控制组和联合文件系统打包到一起所使用的就是容器格式。默认的容器格式是Libcontaine
docker的控制组和联合文件系统,可以设置进程的cpu内存等使用限额,而联合文件系统可以建立联合挂载点,共享存储。

简介

LXC(LinuX Containers)Linux容器,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
在Linux内核中,提供了cgroups功能,来达成资源的隔离。它同时也提供了名称空间隔离的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要启动任何虚拟机。
LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。

而Docker本质来说不是容器,而是容器的管理工具,最初的Docker也是基于LXC实现的。

LXC关键技术点:
chroot,根切换,从容器内的角度来看,仿佛真的有自己的根树
namespaces:名称空间,负责将资源隔离,比如pid,网络,mnt,user,uts等
CGroups:控制组,负责控制资源的分配

部署

环境说明:

系统版本ip地址
centos7192.168.71.136
//安装epel源
[root@localhost ~]# yum -y install epel-release 


安装LXC以及其依赖包
[root@localhost ~]# yum -y install lxc lxc-templates bridge-utils lxc-libs libcgroup libvirt perl debootstrap

lxc-templat  //LXC的配置模板
bridge-utils  //这个是网桥管理的工具包
lxc-libs  //LXC所需要的库文件
libcgroup  //cgroup是为linux内核提供任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。
libvirt   //管理linux虚拟化功能所需要的服务器端的守护程序。需要针对特定驱动程序的管理程序。

开启服务

[root@localhost ~]# systemctl start lxc
[root@localhost ~]# systemctl start libvirtd

[root@localhost ~]# lxc-checkconfig   //检查配置
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-862.el7.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
newuidmap is not installed
newgidmap is not installed
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup 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
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled

--- 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: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

创建虚拟机

// 查看当前系统中可用的LXC模板容器
[root@localhost ~]# ls /usr/share/lxc/templates/
lxc-alpine    lxc-archlinux  lxc-centos  lxc-debian    lxc-fedora  lxc-openmandriva  lxc-oracle  lxc-sshd    lxc-ubuntu-cloud
lxc-altlinux  lxc-busybox    lxc-cirros  lxc-download  lxc-gentoo  lxc-opensuse      lxc-plamo   lxc-ubuntu

创建LXC主机

[root@localhost ~]# lxc-create -t centos -n myhost1  //创建LXC主机,-t 指定模板容器,-n 指定要创建的主机名

Copying rootfs to /var/lib/lxc/myhost1/rootfs ...   #生成虚拟系统的根,文件默认路径在/var/lib/lxc/myhsot1下
/var/lib/lxc/myhost1/tmp_root_pass'        #这个文件保存了主机的初始root密码
chroot /var/lib/lxc/myhost1/rootfs passwd   #可以使用这个命令修改初始root密码

//lxc主机所生成的文件默认路径在/var/lib/lxc/主机名/目录下
[root@localhost myhost1]# pwd
/var/lib/lxc/myhost1

[root@localhost myhost1]# ls
config  rootfs  tmp_root_pass
// config为配置文件
// rootfs为根目录
// tmp_root_pass root密码存放位置

启动主机

[root@localhost myhost1]# chroot /var/lib/lxc/myhost1/rootfs/ passwd  //修改初始密码
更改用户 root 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

[root@localhost myhost1]# lxc-start -n myhost1
systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization lxc.
Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!

Running in a container, ignoring fstab device entry for /dev/root.
Cannot add dependency job for unit display-manager.service, ignoring: Unit not found.
[  OK  ] Reached target Remote File Systems.
此处省略N行
myhost1 login: root     #使用root用户登陆
Password:           #输入设置的root密码

查看lxc主机的一些系统信息

[root@myhost1 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G  2.3G   48G   5% /
devtmpfs                 1.4G     0  1.4G   0% /dev
tmpfs                    1.4G     0  1.4G   0% /dev/shm
tmpfs                    1.4G   17M  1.4G   2% /run
tmpfs                    1.4G     0  1.4G   0% /sys/fs/cgroup
tmpfs                    280M     0  280M   0% /run/user/0

[root@myhost1 ~]# ip a  //查看网卡的信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:9f:2e:9a:ff:b5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.122.118/24 brd 192.168.122.255 scope global dynamic eth0
       valid_lft 3403sec preferred_lft 3403sec
    inet6 fe80::fc9f:2eff:fe9a:ffb5/64 scope link 
       valid_lft forever preferred_lft forever

lxc-start -n myhost1 -d                     #在启动时添加-d选项可以把主机防止后台有运行
lxc-console -n myhost1                      #使用lxc-console 进行连接

71[root@localhost ~]# ssh root@192.168.122.118
root@192.168.122.118's password:  //可以使用ssh进行连接

查看主机的运行状态

[root@localhost myhost1]# lxc-info -n myhost1
Name:           myhost1
State:          RUNNING
PID:            1741
IP:             192.168.122.118
CPU use:        0.17 seconds
BlkIO use:      15.54 MiB
Memory use:     8.04 MiB
KMem use:       0 bytes
Link:           veth55YWH2
 TX bytes:      1.42 KiB
 RX bytes:      6.19 KiB
 Total bytes:   7.61 KiB
//停止lxc主机
[root@localhost myhost1]# lxc-stop -n myhost1

//克隆主机
[root@localhost myhost1]# lxc-clone -o myhost1 -n myhost2  //把myhost1克隆为名字为myhost2
Created container myhost2 as copy of myhost1

//删除主机
[root@localhost myhost1]# lxc-destroy -n myhost1

[root@localhost ~]# lxc-start -n myhost2
systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization lxc.
Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!
此处省略N行
myhost2 login: root
Password:   //密码与myhost1相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PVE代表Proxmox Virtual Environment,是一种开源的虚拟化管理平台,允许用户在服务器上创建和管理虚拟机、容器等虚拟环境。PVE提供了多种虚拟化技术的支持,其中包括LXCDockerLXC(Linux Containers)是一种轻量级的操作系统级虚拟化技术,允许在同一个Linux内核上运行多个隔离的用户空间实例。LXC提供了对资源的隔离和限制,使得用户可以在容器中运行应用程序,而无需为每个应用程序使用一个完整的虚拟操作系统。通过使用LXC,用户可以高效地共享主机操作系统的资源,并且可以快速启动和停止容器。 Docker是一种应用容器化平台,允许用户将应用程序和所有依赖的库、环境等打包在一个可以独立运行的容器中。Docker基于LXC技术,通过使用Docker镜像和容器来管理和运行应用程序。Docker提供了一种轻松部署、扩展和管理应用程序的方式,并且具有高度可移植性和可重复性。 在PVE中,用户可以使用LXCDocker来创建和管理虚拟环境。LXCDocker在应用场景和使用方式上有所区别。LXC更适合于隔离运行多个用户空间实例的场景,如运行多个Web服务器、数据库等应用。而Docker更适合于打包和部署应用程序的场景,如快速部署、扩展和管理微服务架构。 总之,PVE提供了LXCDocker两种虚拟化技术,满足了用户创建和管理虚拟环境的需求。具体选择使用哪种技术取决于用户的具体应用场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值