LINUX.ORG.RU
ФорумAdmin

LXC. Пример контейнеров.

 , ,


1

2

Трям, здрасте

Дисклеймер: на самого крутого и гламурного я не претендую. Просто скрипт, который ждёт конструктивной критики и предложений. Предупреждаю: ответственности за поломаные системы в продакшене я не несу.

Написал небольшой скрипт, сработает на любой 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”

2-ой будет создавать контейнеры и готовить к работе

Чем это лучше штатного lxc-create?

MrClon ★★★★★
()

Зачем это, когда для человеческого удобного менеджмента lxc есть готовый и рабочий lxd?

Ip0 ★★★★
()

Казалось бы можно было бы просто использовать lxd.

anonymous_sama ★★★★★
()
Ответ на: комментарий от MrClon

Если просмотреть не название, а код - можно получить ответы на все вопросы. Оно использует lxc-create. Потом вешает в конфиг контейнера 2 адаптера (nat и мост), ставит openssh server.

egeneralov
() автор топика
Ответ на: комментарий от MrClon

Согласен. Но:

  • вдруг кому-то нужен будет готовый скрипт для быстрого приготовления
  • начинающие юзвери будут точно рады :D
egeneralov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.