LXC. Пример контейнеров.
Трям, здрасте
Дисклеймер: на самого крутого и гламурного я не претендую. Просто скрипт, который ждёт конструктивной критики и предложений. Предупреждаю: ответственности за поломаные системы в продакшене я не несу.
Написал небольшой скрипт, сработает на любой Debian-базированной системе. Ставил на чистый debian 8, проблем не возникло, оттестировал на виртуалке работоспособность.
Напоминаю, не копи-паст в консоль, а сохранили в файлик - дали права на исполнение - запустили.
1-ый скрипт подготовит систему для работы с lxc, 2-ой будет создавать контейнеры и готовить к работе.
- Создать и заполнить файлы install_lxc и create_container
- Поправить настройки сети (поиск 1.0.0) в install_lxc
- chmod +x
- ./install_lxc
./install_lxc
#!/bin/bash
echo “Updating system and installing dependences”
apt-get update > /dev/null 2>&1
apt-get upgrade -y > /dev/null 2>&1
apt-get install lxc cgroup-bin bridge-utils debootstrap bridge-utils isc-dhcp-server -y > /dev/null 2>&1
#mount | grep cgroup
echo “Updating network”
cat <<< '
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
bridge_ports eth1
bridge_fd 0
address 1.0.0.36
netmask 255.255.255.0
gateway 1.0.0.1
dns-nameservers 1.0.0.1 8.8.8.8
auto nat0
iface nat0 inet static
bridge_ports none
bridge_fd 0
address 10.0.0.1
netmask 255.255.255.0
post-up iptables-restore < /etc/network/iptables.up.rules
' > /etc/network/interfaces
echo “Enable packet forwarding”
sed -ie 's/#net.ipv4.ip_forward/net.ipv4.ip_forward/g' /etc/sysctl.conf
echo “Set up NAT”
sed -ie 's/INTERFACES=\"\"/INTERFACES="nat0"/g' /etc/default/isc-dhcp-server
cat <<< '
authoritative;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.10 10.0.0.50;
option domain-name-servers 192.168.0.1, 8.8.8.8;
option domain-name “lxc.ru”;
option routers 10.0.0.1;
default-lease-time 600;
max-lease-time 7200;
}
' >> /etc/dhcp/dhcpd.conf
cat <<< '*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o lxbr0 -j MASQUERADE
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*filter
:FORWARD ACCEPT [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT' > /etc/network/iptables.up.rules
echo "finished, restart!"
./create_container name
#/bin/bash
echo “Creating container $1”
lxc-create -t debian -n $1 > /dev/null 2>&1
echo "deb http://mirror.yandex.ru/debian sid main contrib non-free" > /var/lib/lxc/$1/rootfs/etc/apt/sources.list
chroot /var/lib/lxc/$1/rootfs apt update
sed -ie 's/lxc.network.type/#lxc.network.type/g' /var/lib/lxc/$1/config
cat <<< '
lxc.network.type = veth
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.flags = up
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = nat0
lxc.network.name = eth1
' >> /var/lib/lxc/$1/config
echo “Please enter root password for container”
chroot /var/lib/lxc/$1/rootfs passwd
chroot /var/lib/lxc/$1/rootfs apt update
chroot /var/lib/lxc/$1/rootfs apt install openssh-server htop $1-server -y
lxc-start -n $1 -d
echo “finished! use lxc-attach -n $1”