使用 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
- 点赞
- 收藏
- 关注作者
评论(0)