Docker从认识到实践再到底层原理(二-3)|LXC容器

  • Post author:
  • Post category:其他


在这里插入图片描述



前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!




LXC

LXC (LinuX Containers) Linux容器,一种操作系统层虚拟化技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器 (Container)内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境使得 Linux 用户可以容易的创建和管理系统或应用容器。

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

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

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



lxc-checkconfig

检查系统环境是否满足容器使用要求。



lxc-create

创建lxc容器

lxc-create -n NAME -t TEMPLATE_NAME [--template-options]



lxc-start

lxc-start -n NAME -d # 启动容器



lxc-ls

lxc-ls -f # 列出所有的容器 -f 表示打印常用的信息



lxc-info

lxc-info -n NAME # 查看容器相关的信息



lxc-attach

进入容器

lxc-attach --name=NAME [--COMMAND]



lxc-stop

lxc -stop -n NAME # 停止容器



lxc-destroy

lxc-destroy -n NAME # 删除处于停机状态的容器



lxc的安装


https://www.mryunwei.com/294151.html



lxc容器实战

检查lxc运行状态。

[root@ALiCentos7:/home/yufc]$ 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 Thu 2023-08-31 22:06:05 CST; 2min 56s ago
  Process: 5141 ExecStart=/usr/libexec/lxc/lxc-autostart-helper start (code=exited, status=0/SUCCESS)
  Process: 5134 ExecStartPre=/usr/libexec/lxc/lxc-devsetup (code=exited, status=0/SUCCESS)
 Main PID: 5141 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
   CGroup: /system.slice/lxc.service

Aug 31 22:05:34 ALiCentos7 systemd[1]: Starting LXC Container Initialization and Autoboot Code...
Aug 31 22:05:34 ALiCentos7 lxc-devsetup[5134]: Creating /dev/.lxc
Aug 31 22:05:34 ALiCentos7 lxc-devsetup[5134]: /dev is devtmpfs
Aug 31 22:05:34 ALiCentos7 lxc-devsetup[5134]: Creating /dev/.lxc/user
Aug 31 22:06:04 ALiCentos7 lxc-autostart-helper[5141]: Starting LXC autoboot containers:  [  OK  ]
Aug 31 22:06:05 ALiCentos7 systemd[1]: Started LXC Container Initialization and Autoboot Code.
[root@ALiCentos7:/home/yufc]$ 

检查系统环境是否满足容器使用要求。

[root@ALiCentos7:/home/yufc]$ lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-1160.88.1.el7.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
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

[root@ALiCentos7:/home/yufc]$

查看lxc提供的容器模版。

[root@ALiCentos7:/home/yufc]$ ls /usr/share/lxc/templates/
lxc-alpine     lxc-busybox  lxc-debian    lxc-gentoo        lxc-oracle  lxc-ubuntu
lxc-altlinux   lxc-centos   lxc-download  lxc-openmandriva  lxc-plamo   lxc-ubuntu-cloud
lxc-archlinux  lxc-cirros   lxc-fedora    lxc-opensuse      lxc-sshd
[root@ALiCentos7:/home/yufc]$

都有这么一些模版。

创建一个ubuntu的容器。

lxc-create -t ubuntu --name lxchost1 -- -r xenial -a amd64

安装好之后,

lxc-ls

[root@ALiCentos7:/home/yufc]$ lxc-ls -f
NAME      STATE    IPV4  IPV6  AUTOSTART  
----------------------------------------
lxchost1  STOPPED  -     -     NO         
[root@ALiCentos7:/home/yufc]$

启动这个容器。

[root@ALiCentos7:/home/yufc]$ lxc-start -n lxchost1 -d # 让他后台运行
[root@ALiCentos7:/home/yufc]$ lxc-ls -f
NAME      STATE    IPV4  IPV6  AUTOSTART  
----------------------------------------
lxchost1  RUNNING  -     -     NO         
[root@ALiCentos7:/home/yufc]$

查看这个容器的信息。

[root@ALiCentos7:/home/yufc]$ lxc-info -n lxchost1
Name:           lxchost1
State:          RUNNING
PID:            12901
IP:             192.168.122.244 # 通过这个IP地址,我们可以ssh连接这个容器
CPU use:        0.06 seconds
BlkIO use:      7.29 MiB
Memory use:     7.71 MiB
KMem use:       0 bytes
Link:           vethM2V3M1
 TX bytes:      2.02 KiB
 RX bytes:      4.12 KiB
 Total bytes:   6.14 KiB
[root@ALiCentos7:/home/yufc]$

我们有了这个IP地址之后,可以通过ssh的方法,或者

lxc-attach

的方法连接这个容器。

[root@ALiCentos7:/home/yufc]$ ssh ubuntu@192.168.122.244
The authenticity of host '192.168.122.244 (192.168.122.244)' can't be established.
ECDSA key fingerprint is SHA256:QQF2a8Od/77dtoGj3sDMJMwP4rWIrJRuMFRIu1ofWmw.
ECDSA key fingerprint is MD5:da:54:c2:47:fb:24:ef:fa:fc:49:c0:c3:53:f2:c3:d0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.244' (ECDSA) to the list of known hosts.
ubuntu@192.168.122.244's password: 
Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 3.10.0-1160.88.1.el7.x86_64 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@lxchost1:~$ # 此时发现,我们的bash已经发生了变化!这里面就是一个容器!!!


此时发现,我们的bash已经发生了变化!这里面就是一个容器!!!

在这里插入图片描述

通过第二种方式:

lxc-attach

的方式。

lxc-attach -n lxchost1 --clear-env -- /bin/bash

这种方式也是可以的。

在这里插入图片描述

停止这个容器。

lxc-stop -n lxchost1

删除这个容器。

lxc-destroy -n lxchost1



版权声明:本文为Yu_Cblog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。