在 ubuntu 上运行 Linux 容器(lxc)来隔离 Web 服务器进程(ruby/thin)

在 ubuntu 上运行 Linux 容器(lxc)来隔离 Web 服务器进程(ruby/thin)

我正在尝试设置一个服务器,在其中运行多个应用程序。大部分是内部的,但也可能是像 Redmine 这样的开源项目。它们都是在无头浏览器上运行的 Rails/Ruby 应用程序/测试脚本。本质上,我正在尝试在内部设置类似 heroku 的环境,并希望在这些正在运行的进程之间进行某种进程隔离。

我首先偶然发现了 chroot jails,然后了解了 LXC。LXC 似乎比普通的 chroot jails 提供了更好的控制。我有一个 nginx 前端,我想在隔离的容器中运行 Web 服务器应用程序进程 (thin/mongrel/webrick)。通常我们只是在本地 IP 地址上启动这些进程,并让 nginx 代理它们。完成此操作的最佳方法是什么?人们是否为容器设置了静态桥接 IP 并让 nginx 指向它?如何确保在容器中运行的 Web 服务器只能由外部主机访问?

关于 LXC 的文档似乎有点稀疏。如果能提供一些好的教程或 HOWTO,我将不胜感激。我的目标部署环境是 Lucid 64 位机器。

PS:我不是 Linux 专家。所以,请温柔一点。

答案1

假设您自己的 IP 是 192.168.1.1,网关是 192.168.1.254,网络是 192.168.1.0/24。

你应该在主机上创建一个桥接接口,就像这样/etc/网络/接口文件

 auto lo
 iface lo inet loopback

 auto br0
 iface br0 inet static
     address 192.168.1.1
     network 192.168.1.0
     netmask 255.255.255.0
     broadcast 192.168.1.255
     gateway 192.168.1.254
     bridge_ports eth0
     bridge_stp off
     bridge_fd 3
     bridge_hello 1
     bridge_maxage 5

然后在 LXC 中安装一个基本的 ubuntu:

 apt-get install lxc vlan bridge-utils python-software-properties screen
 mkdir /lxc
 debootstrap oeniric /lxc/ubuntu
 chroot ubuntu
 locale-gen en_US.UTF-8
 apt-get update
 apt-get install lxcguest ssh
 passwd
 rm /etc/mtab
 ln -s /proc/mounts /etc/mtab
 exit

创建文件/lxc/ubuntu.config与内容

 lxc.utsname = ubuntu
 lxc.tty = 8
 lxc.rootfs = /lxc/ubuntu
 lxc.mount = /lxc/ubuntu.fstab
 lxc.network.type = veth
 lxc.network.flags = up
 lxc.network.link = br0
 lxc.network.name = eth0
 lxc.network.mtu = 1500
 lxc.network.ipv4 = 192.168.1.10/24

/lxc/ubuntu.fstab

 none /lxc/ubuntu/dev/pts devpts defaults 0 0
 none /lxc/ubuntu/proc proc defaults 0 0
 none /lxc/ubuntu/sys sysfs defaults 0 0
 none /lxc/ubuntu/run tmpfs defaults 0 0

添加/lxc/ubuntu/etc/rc.local

 route add default gw 192.168.1.254

编辑/lxc/ubuntu/etc/resolv.cont根据您的需要。

然后你可以使用

 lxc-create -f /lxc/ubuntu.config -n ubuntu

然后开始

 lxc-start -n ubuntu

或停止

 lxc-stop -n ubuntu

或最终摧毁

 lxc-destroy -n ubuntu

您的新虚拟机将具有 IP 192.168.1.10,并可通过网络访问。

答案2

如果你不想给容器提供外部 IP 地址或者不能:

Debian Wiki 上的 LXC 页面提到了在主机上使用 NAT 实现该目的的两种变体。我使用的方法虚拟器到目前为止还没有出现任何问题。

我不知道在 Ubuntu 下它是什么样的,但可能没有太大的区别。

Wiki 页面似乎是一个很好的信息来源,但维护者本人表示您应该参考文件/usr/share/doc/lxc/README.Debian来获取最新信息。

相关内容