首先介绍一下容器与虚拟化的区别
VM(VMware)在宿主机器、宿主机器 *** 作系统的基础上创建虚拟层、虚拟化的 *** 作系统、虚拟化的仓库,然后再安装应用;
Docker在宿主机器的 *** 作系统上创建Docker引擎,直接在宿主主机的 *** 作系统上调用硬件资源,而不是虚拟化 *** 作系统和硬件资源,所以 *** 作速度快。
docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的 *** 作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口( *** 作系统)没有关系。
因此我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的。
此外docker的另一个好处就是快速部署,这是当前互联网公司最常见的一个应用场景,一个原因在于容器启动速度非常快,另一个原因在于只要确保一个容器中的程序正确运行,那么你就能确信无论在生产环境部署多少都能正确运行。
docker产生的背景一款软件或服务产生的原因和背景有一定的原因是为了解决生产或工作环境中遇到的问题
-
生产、工作中产生的问题开发和运维环境或配置不同,导致开发环境运行良好的交付产物在运维环境出问题,此类问题让人不胜其烦。
-
传统运维过程中,如果线上有十台机器,每台都需要重新部署一次,重复劳动。
-
配置应用环境不能跨平台。
-
多个应用安装到环境中可能会冲突,例如端口冲突。
软件包->发布(应用商店)->下载包->安装可用
docker发布流程:软件包->打包带上环境(镜像)->Docker仓库:商店->下载发布的镜像->直接运行可用
docker的机制很好的解决了这些问题
1,docker源于集装箱的思想,自带隔离机制,容器与容器之间互不干扰
2,一次构建,随处运行。docker可以将写好镜像文件进行打包到任何docker服务中去运 行,这个源于docker的容器格式:Docker引擎将名称空间、控制组和联合文件系统打包 到一起所使用的就是容器格式。默认的容器格式是Libcontaine
3,docker的控制组和联合文件系统,可以设置进程的cpu内存等使用限额,而联合文件系统可以建立联合挂载点,共享存储。
通过传统方式使用容器功能的话需要我们自己写代码去进行系统调用来实现创建内核,实际上拥有此能力的人廖廖无几。而LXC(LinuX Container)把容器技术做得更加易用,把需要用到的容器功能做成一组工具,从而极大的简化用户使用容器技术的麻烦程度。
LXC是最早一批真正把完整的容器技术用一组简易使用的工具和模板来极大的简化了容器技术使用的一个方案。
LXC虽然极大的简化了容器技术的使用,但比起直接通过内核调用来使用容器技术,其复杂程度其实并没有多大降低,因为我们必须要学会LXC的一组命令工具,且由于内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。其隔离性也没有虚拟机那么强大。
后来就出现了docker,所以从一定程度上来说,docker就是LXC的增强版。
环境说明:
[root@localhost ~]# yum -y install epel-release //安装epel源安装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:查看主机的运行状态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: 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 进行连接 [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条)