使用 LXC 命令创建和启动 LXC Linux 容器

举报
Tiamo_T 发表于 2022/10/10 08:16:30 2022/10/10
【摘要】 LXC 容器是创建伪虚拟环境的一种非常快速的方法。 在之前的 LXC 文章中,我们解释了如何安装和配置 LXC linux 容器。

LXC 容器是创建伪虚拟环境的一种非常快速的方法。

在之前的 LXC 文章中,我们解释了如何安装和配置 LXC linux 容器

在本教程中,我们将解释如何创建新的 Linux 容器、启动容器并登录 LXC 虚拟控制台以使用新容器。

为了演示,我们将在本教程中创建一个 CentOS LXC 虚拟容器,但您可以为几乎任何您想要的 Linux 发行版创建虚拟容器。

1. LXC 容器模板

Linux Containers LXC 默认为几个流行的 linux 发行版提供容器模板。以下是一些您可以立即使用的 LXC 模板。

  • CentOS
  • Ubuntu
  • Fedora
  • OpenSUSE
  • Gentoo
  • Debian
  • Oracle Linux
  • ArchLinux

所有可用的 LXC 模板都位于 /usr/local/share/lxc/templates 目录下。

# ls -1 /usr/local/share/lxc/templates
lxc-alpine
lxc-altlinux
lxc-archlinux
lxc-busybox
lxc-centos
lxc-cirros
lxc-debian
lxc-download
lxc-fedora
lxc-gentoo
lxc-openmandriva
lxc-opensuse
lxc-oracle
lxc-plamo
lxc-sshd
lxc-ubuntu
lxc-ubuntu-cloud

2. 使用 lxc-create 创建一个容器

要创建容器,请使用 lxc-create 命令,如下所示。

在以下命令中:

  • -n 选项表示容器名称
  • -t 选项表示用于创建容器的模板。在这个例子中,我们使用 lxc-centos 模板来创建一个 CentOS 容器。

在这个例子中,这将创建带有 centos 最小安装的 CentOS 容器。

这将下载运行 CentOS 最小所需的所有软件包(例如,大约 140 个软件包),并将它们安装为 MyCentOSContainer1 容器的一部分

# lxc-create -n MyCentOSContainer1 -t /usr/local/share/lxc/templates/lxc-centos
/usr/local/share/lxc/templates/lxc-centos
Host CPE ID from /etc/system-release-cpe: cpe:/o:centos:linux:6:GA
dnsdomainname: Unknown host
Checking cache download in /usr/local/var/cache/lxc/centos/x86_64/6/rootfs ... 
Downloading centos minimal ...
...
...
  Installing : libgcc-4.4.7-16.el6.x86_64       1/142 
  Installing : setup-2.8.14-20.el6_4.1.noarch   2/142 
  Installing : filesystem-2.4.30-3.el6.x86_64   3/142 
...
  Verifying  : gzip-1.3.12-22.el6.x86_64        139/142 
  Verifying  : mingetty-1.08-5.el6.x86_64       140/142 
  Verifying  : libxml2-2.7.6-20.el6_7.1.x86_64  141/142 
  Verifying  : 1:findutils-4.4.2-6.el6.x86_64   142/142 
...
Download complete.
Copy /usr/local/var/cache/lxc/centos/x86_64/6/rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ... 
Copying rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ...

3. LXC 容器的 Root 密码

LXC 容器的 root 密码存储在:/usr/local/var/lib/lxc/{container-name}/tmp_root_pass

因此,在上面的示例中,对于我们刚刚创建的 LXC 容器,临时 root 密码如下:

# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass
Root-MyCentOSContainer1-pf7qMB

您可以随时更改容器的 root 密码,即使您的容器已通过使用控制主机的 chroot 关闭,如下所示。

# chroot /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs passwd
Changing password for user root.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

4. 使用 lxc-start 启动 LXC Linux Container

创建容器后,使用如下所示的 lxc-start 启动容器。

# lxc-start -n MyCentOSContainer1
lxc-start: cgfs.c: handle_cgroup_settings: 2077 Device or resource busy - failed to set memory.use_hierarchy to 1; continuing

CentOS release 6.6 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64

MyCentOSContainer1 login: init: rcS main process (8) killed by TERM signal
Entering non-interactive startup
Bringing up loopback interface:               [  OK  ]
Bringing up interface eth0:
Determining IP information for eth0... done.  [  OK  ]
Starting system logger:                       [  OK  ]
Mounting filesystems:                         [  OK  ]
Generating SSH2 RSA host key:                 [  OK  ]
Generating SSH1 RSA host key:                 [  OK  ]
Generating SSH2 DSA host key:                 [  OK  ]
Starting sshd:               				  [  OK  ]

CentOS release 6.6 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64

MyCentOSContainer1 login:

如果您收到以下“容器无法启动”错误消息,则说明您的配置有问题。

# lxc-start -n MyCentOSContainer1
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 346 To get more details, run the container in foreground mode.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.

要准确找出您的配置有什么问题,请使用 -F 选项在前台运行 LXC 容器,如下所示。

如果您收到以下“无法连接到网桥”、“无法创建 netdev”、“无法创建网络”的错误消息,那么您的系统上的网桥适配器配置不正确。

检查我们在之前的LXC Linux 容器设置文章中提到的 ifcfg-br0 设置,以确保您的网桥配置设置正确且正常工作。

# lxc-start -F -n MyCentOSContainer1
lxc-start: conf.c: instantiate_veth: 2796 failed to attach 'veth8VPW29' to the bridge 'lxcbr0': Operation not permitted
lxc-start: conf.c: lxc_create_network: 3079 failed to create netdev
lxc-start: start.c: lxc_spawn: 935 failed to create the network
lxc-start: start.c: __lxc_start: 1192 failed to spawn 'MyCentOSContainer1'
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.

5. 使用 lxc-info 查看容器信息

要显示有关容器的详细信息,请使用 lxc-info 命令,如下所示。

# lxc-info -n MyCentOSContainer1
Name:           MyCentOSContainer1
State:          RUNNING
PID:            7696
IP:             192.168.100.101
CPU use:        1.61 seconds
BlkIO use:      32.00 KiB
Memory use:     2.63 MiB
Link:           vethLNI1UH
 TX bytes:      1.98 KiB
 RX bytes:      46.08 KiB
 Total bytes:   48.06 KiB

6. 使用 lxc-stop 停止 LXC Linux Container

要停止您的 LXC linux 容器,请使用如下所示的 lxc-stop,并指定您要停止的容器名称。

# lxc-stop -n MyCentOSContainer1

7. 使用 lxc-clone 克隆现有容器

当您想在对容器的配置进行任何更改之前拍摄旧容器的快照时,克隆非常有用。您可以将其用作容器配置的简单备份方法。

可以使用 lxc-clone 命令克隆容器,如下所示。在这种情况下,新的容器名称是 MyCentOSContainer2

# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2
Created container MyCentOSContainer2 as copy of MyCentOSContainer1

8. 使用 lxc-destory 删除现有容器

要删除现有容器,请使用 lxc-destroy 命令,如下所示。

# lxc-destroy -n MyCentOSContainer2

9. 连接到 LXC Linux 容器控制台

要连接到容器的控制台,请使用以下 lxc-console 命令。

# lxc-console -n MyCentOSContainer1
Connected to tty 1
Type Ctrl+a q to exit the console, Ctrl+a Ctrl+a to enter Ctrl+a itself

CentOS release 6.6 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64

MyCentOSContainer1 login:

10. 使用 lxc-config 更改 LXC 配置

要更改 LXC 配置,可以使用 lxc-config 命令。

首先,使用 lxc-config -l 选项,它将只显示所有可用的配置,如下所示。

# lxc-config -l
lxc.default_config
lxc.lxcpath
lxc.bdev.lvm.vg
lxc.bdev.lvm.thin_pool
lxc.bdev.zfs.root
lxc.cgroup.use
lxc.cgroup.pattern

接下来,使用如下所示的 lxc.default_config 选项来查看有关每个配置文件及其相关参数的信息。

# lxc-config lxc.default_config
/usr/local/etc/lxc/default.conf

# cat /usr/local/etc/lxc/default.conf
lxc.network.type = veth
lxc.network.link = virbr0
lxc.network.flags = up

以下命令将显示存储所有容器的 LXC 补丁。

# lxc-config lxc.lxcpath
/usr/local/var/lib/lxc

正如我们在下面看到的,我们看到了我们在这个目录下创建的两个容器。

# cd /usr/local/var/lib/lxc

# ls
MyCentOSContainer1  MyCentOSContainer2

在容器目录下,您将看到配置文件,其中包含该特定容器的所有基本配置信息,如下所示。

# cd /usr/local/var/lib/lxc/MyCentOSContainer1

# vi config
lxc.network.type = veth
lxc.network.link = virbr0
lxc.network.hwaddr = fb:bb:f2:87:e8:17
lxc.network.flags = up
lxc.rootfs = /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs
lxc.include = /usr/local/share/lxc/config/centos.common.conf
lxc.arch = x86_64
lxc.utsname = MyCentOSContainer1
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。