在Ubuntu Linux 14.04 LTS上如何创建非特权LXC容器

时间:2019-11-20 08:53:48  来源:igfitidea点击:

在Ubuntu Linux 14.04上如何安装,创建和管理非特权LXC容器?
如何创建不需要sudo或者root特权的Linux容器?
在Ubuntu Linux服务器上如何安装和管理LXC容器?

Linux容器

LXC是Linux容器(Linux Container)的缩写。
是一种操作系统级的轻量级的虚拟化技术。
通过它,可以在一台Linux主机上运行多个不同的Linux系统。
非特权Linux容器是指不需要sudo或者root就能运行的容器。

在Ubuntu上安装lxc

输入以下apt-get命令进行安装:

$ sudo apt-get install lxc

LXC和网络

LXC创建了一个NAT网桥。
每个容器有一个NIC接口。
所有的流量都使用网桥路由。

查看当前的设置:

$ sudo brctl show

查看分配给网桥的IP地址:

$ sudo ifconfig lxcbr0

查看容器使用的DHCP IP范围:

$ ps aux | grep lxc-dns | grep -o 'dhcp-range.[0-9].* '

检查当前内核是否支持lxc容器:

$ lxc-checkconfig

创建非特权容器

非特权容器的运行方式与特权容器相同,只是无需使用sudo或root访问权限即可。

为lxc创建一个新用户

执行以下命令创建一个新用户lxcuser

$ sudo useradd -s /sbin/bash -c 'unprivileged lxc user' -m lxcuser

为Lxc设置密码

设置lxcuser的密码

$ sudo passwd lxcuser

查看分配给用户的subuid和subgids

输入以下命令

$ sudo grep lxcuser /etc/sub{gid,uid}

创建默认的容器配置文件

设置允许用户lxcuser创建10个添加到lxcbr0网桥的veth类型设备

$ sudo vi /etc/lxc/lxc-usernet

添加下面内容

lxcuser veth lxcbr0 10

使用su切换到新用户:

$ su - lxcuser

创建新目录~/.config/lxc/Director:

$ mkdir -p ~/.config/lxc

创建默认配置文件default.conf:

$ cp /etc/lxc/default.conf ~/.config/lxc/default.conf
$ vi ~/.config/lxc/default.conf

内容如下:

100000和65536分别是用户名ID和组ID

lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536

创建新的容器

创建一个新ubuntu系统容器httpd:

$ lxc-create -t download -n httpd -- -d ubuntu -r trusty -a amd64

启动新容器

启动容器httpd:

$ lxc -n httpd -d
$ echo $?
$ lxc-ls --fancy

登录容器:

$ lxc-attach -n httpd

在容器中执行命令:

root@httpd:/# id
uid=0(root) gid=0(root) groups=0(root)
root@httpd:/# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:16:3e:ea:ce:fa  
          inet addr:10.0.3.61  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:feea:cefa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3502 (3.5 KB)  TX bytes:3362 (3.3 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@httpd:/# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 14.04.3 LTS
Release:	14.04
Codename:	trusty

默认情况下,容器镜像是没有用户帐户的,也没有root密码。
为httpd容器的root设置密码:

# passwd root

在httpd容器中启用sshd:

# apt-get install openssh-server

现在就可以使用ssh登录到容器:

$ ssh [email protected]

LXC容器命令说明

如何启动容器?

$ lxc-start -n {container-name-here} -d
$ lxc-start -n mysql -d

如何停止容器?

$ lxc-stop -n {container-name-here}
$ lxc-stop -n mysql

如何删除LXC容器?

$ lxc-destroy -n {container-name-here}
$ lxc-destroy -n mysql

如何列出所有容器?

$ lxc-ls
$ lxc-ls --fancy

如何更新容器?

使用lxc-attach命令更新Ubuntu或Debian容器:

$ lxc-attach -n mysql apt-get -- -qq update
$ lxc-attach -n mysql apt-get -- -qq upgrade
$ lxc-attach -n nginx yum -- -y update

如何为容器永久IP地址?

在主机中运行以下命令:

$ sudo vi /etc/lxc/dnsmasq.conf

为各个容器设置各自的IP

dhcp-host=httpd,10.0.3.20
dhcp-host=mysql,10.0.3.21
dhcp-host=nginx,10.0.3.23

如何创建CentOS/Gentoo/Fedora LXC容器?

$ lxc-create -t download -n {container-name-here} -- -d {DISTRONAME} -r {RELEASE} -a {ARCH}
$ lxc-create -t download -n bar -- -d centos -r 6 -a amd64
$ lxc-create -t download -n foo -- -d gentoo -r current -a amd64
$ lxc-create -t download -n db -- -d ubuntu -r precise -a i386
$ lxc-create -t download -n nginx -- -d debian -r jessie -a amd64
$ lxc-create -t download -n mysql -- -d fedora -r 22 -a amd64
$ lxc-create -t download -n maridb -- -d oracle -r 6.5 -a amd64
$ lxc-create -t download -n cahcing -- -d plamo -r 5.x -a amd64