docker容器技术基础入门及LXC的配置

docker容器技术基础入门及LXC的配置,第1张

docker容器技术基础入门及LXC的配置 docker简介

首先介绍一下容器与虚拟化的区别
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

通过传统方式使用容器功能的话需要我们自己写代码去进行系统调用来实现创建内核,实际上拥有此能力的人廖廖无几。而LXC(LinuX Container)把容器技术做得更加易用,把需要用到的容器功能做成一组工具,从而极大的简化用户使用容器技术的麻烦程度。

LXC是最早一批真正把完整的容器技术用一组简易使用的工具和模板来极大的简化了容器技术使用的一个方案。

LXC虽然极大的简化了容器技术的使用,但比起直接通过内核调用来使用容器技术,其复杂程度其实并没有多大降低,因为我们必须要学会LXC的一组命令工具,且由于内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。其隔离性也没有虚拟机那么强大。

后来就出现了docker,所以从一定程度上来说,docker就是LXC的增强版。

环境说明:

系统版本IP地址centos 7.5192.168.35.135 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相同

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5637494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存