树莓派Raspbian默认是支持LXC容器的,下面我们介绍一下在树莓派上创建并运行容器的过程。

1. 安装LXC相关的package

$ sudo apt-get install -y git lxc lxc-dev

2. 创建LXC网络相关配置文件,这样就配置LXC使能Bridge,容器的网络类型为veth,也就是为容器创建一个virtual ethernet的网络接口,并将这个网络接口加入到host的bridge里面去。

$ vi /etc/default/lxc-net
USE_LXC_BRIDGE="true"
$ mkdir -p ~/.config/lxc
$ vi ~/.config/lxc/default.conf
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.name = eth0

3. 将 UID/GID mapping 加入到 default.conf,通过以下的映射,在容器里uid为0,对应到host里面,uid为100000。所以用户在容器里面有root权限,但是在host侧没有root权限。

$ echo "lxc.id_map = u 0 `grep $USER /etc/subuid | cut -f2 -d:` 65536" >> ~/.config/lxc/default.conf
$ echo "lxc.id_map = g 0 `grep $USER /etc/subgid | cut -f2 -d:` 65536" >> ~/.config/lxc/default.conf

此时 ~/.config/lxc/default.conf 的内容应该如下所示(the 100000 values come from the subordinate UID/GID files at /etc/sub[ug]id files):

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.name = eth0 lxc.id_map = u
lxc.id_map = g

4. 将当前用户加入到 "lxcbr0" bridge的用户列表中

$ echo "$USER veth lxcbr0 10" | sudo tee -a /etc/lxc/lxc-usernet
pi veth lxcbr0
$

5. 运行 lxc 和 lxc-net 服务

$ sudo systemctl start lxc
$ sudo systemctl start lxc-net

6. 重启设备

7. 检查看lxc和lxc-net是否运行正常

$ systemctl status lxc
● lxc.service - LXC Container Initialization and Autoboot Code
Loaded: loaded (/lib/systemd/system/lxc.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri -- :: UTC; 7s ago
Docs: man:lxc-autostart
man:lxc
Process: ExecStop=/usr/lib/arm-linux-gnueabihf/lxc/lxc-containers stop (code=exited, status=/SUCCESS)
Process: ExecStart=/usr/lib/arm-linux-gnueabihf/lxc/lxc-containers start (code=exited, status=/SUCCESS)
Process: ExecStartPre=/usr/lib/arm-linux-gnueabihf/lxc/lxc-apparmor-load (code=exited, status=/SUCCESS)
Main PID: (code=exited, status=/SUCCESS)
CPU: 58ms $ systemctl status lxc-net
● lxc-net.service - LXC network bridge setup
Loaded: loaded (/lib/systemd/system/lxc-net.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri -- :: UTC; 16min ago
Process: ExecStop=/usr/lib/arm-linux-gnueabihf/lxc/lxc-net stop (code=exited, status=/SUCCESS)
Process: ExecStart=/usr/lib/arm-linux-gnueabihf/lxc/lxc-net start (code=exited, status=/SUCCESS)
Main PID: (code=exited, status=/SUCCESS)
CPU: 93ms

8. 创建一个 LXC container,取名为 demo,使用的是“download”类型的容器模板

.

$ lxc-create -t download -n demo -- -d alpine -r 3.7 -a armhf
Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs ---
You just created an Alpinelinux 3.7 armhf (20180723_13:) container.
$

9. 用lxc-start启动容器后,用lxc-attach到容器的shell里面,可以继续安装应用程序比如gcc make

最新文章

  1. vs下 qt源码调试
  2. java--UDP屏幕广播代码
  3. log4net.config
  4. XE6 FMX之控件绘制与显示
  5. Redis Set 命令
  6. libcurl上传文件,添加自定义头
  7. [POJ 1155] TELE (树形dp)
  8. Zabbix监控解决方案
  9. Hadoop namenode无法启动问题解决
  10. 减小iOS应用程序的大小
  11. 望大神批评教育国庆无聊之作:ObjectValidator
  12. java 使用Stack来判断Valid Parentheses
  13. 浏览器正确理解和使用GBK及UTF-8(UTF-8 + BOM)网页编码
  14. 使用AndroidStudio编写APICloud模块需要注意的地方,解决模块未定义。
  15. python中hasattr()、getattr()、setattr()函数的使用
  16. MySQL常用数值函数
  17. gstreamer
  18. do文件的编写(转)
  19. Sublime Text 3中文乱码问题解决(最新)
  20. phpstorm添加站点

热门文章

  1. Python的Argparse模块是什么?
  2. QLable 显示图片
  3. SpringCloud学习--微服务架构
  4. linux 中 NTP 对时过程记录
  5. AJAX异步检查,检查用户名是否存在
  6. Java基础(八)对象包装器与自动装箱
  7. 第五篇 Flask 中内置的 Session
  8. Python+requests+unittest+excel实现接口自动化测试框架(摘录)
  9. C++学习笔记6_字符串
  10. [2018-01-12] python 当天学习笔记