Zalecane, 2022

Wybór Redakcji

Jak uruchamiać wiele dystrybutorów jednocześnie, używając kontenerów Linux

Linux Containers (LXC) są lekką technologią wirtualizacji i mają różne zastosowania. Jest częścią jądra Linuksa i pozwala na emulację jednej lub wielu dystrybucji Linuksa na jednym hoście Linux. Pomyśl o tym, jako o środkowym punkcie między technologiami chroot a pełnymi wirtualizacjami, takimi jak VirtualBox, KVM lub Xen. Podobna technologia obecna w świecie BSD to FreeBSD Jails.

Na przykład maszyna, na której piszę, to laptop z Linux Mint 18, zasilany przez procesor Intel Atom i ma skromne 2 GB pamięci RAM. Jednak uruchamiam trzy kontenery Linux, z których każdy ma uruchomioną instancję serwera Apache, bez dużej wydajności. Byłoby to nie do pomyślenia w przypadku tradycyjnej maszyny wirtualnej, takiej jak VirtualBox. Tak więc, jeśli chciałeś uruchomić wiele dystrybucji w systemie Linux, Linux Containers powinien wykonać to zadanie dla Ciebie.

Instalowanie i konfigurowanie kontenerów Linux

Konfigurujemy LXC na Linux Mint 18 64-bit. Przedstawione tu instrukcje instalacji będą działać również niezmodyfikowane w systemie Ubuntu 16.04 i nowszych wersjach. Jeśli używasz innej dystrybucji, zapoznaj się z oficjalną dokumentacją swojej dystrybucji, jeśli coś nie działa zgodnie z oczekiwaniami. Przyjęto również znajomość wiersza poleceń i rozwiązywania problemów ogólnych.

Wymagania wstępne

Oto kilka rzeczy, które powinieneś skonfigurować, aby zacząć korzystać z wielu dystrybucji:

1. Zainstaluj LXC i inne wstępnie wymagane oprogramowanie, używając:

[kod źródłowy] sudo apt install lxc lxc-templates uidmap [/ sourcecode]

2. Teraz musisz skonfigurować swój profil . Wprowadź następujące polecenia, aby je skonfigurować:

[kod źródłowy] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth" & amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; gt; ~ / .config / lxc / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. Następnie musisz skonfigurować uprawnienia użytkownika w następujący sposób:

[kod źródłowy] sudo usermod -add-subuids 100000-165536 $ USER
sudo usermod -add-subgids 100000-165536 $ USER

sudo cgm tworzy wszystkich użytkowników
sudo cgm chown wszystkich użytkowników $ (id -u) $ (id-g)
cgm movepid all user $$ [/ sourcecode]

Konfigurowanie kontenera

Teraz, gdy masz zainstalowany LXC Container wraz z innym wymaganym oprogramowaniem, wykonaj następujące czynności, aby skonfigurować Kontener:

1. W tym przykładzie skonfigurujemy kontener Ubuntu o nazwie ubu1 . Aby to zrobić, wykonaj następujące polecenie:

[kod źródłowy] lxc-create -template pobierz -name ubu1 [/ sourcecode]

2. Tutaj parametr –template mówi lxc, aby pobrać prekonfigurowany obraz z Internetu, podczas gdy parametr –name określa nazwę kontenera - ubu1 w tym przypadku. Możesz użyć dowolnej nazwy.

3. Zostanie wyświetlona lista obsługiwanych obrazów destrukcyjnych :

4. Wprowadź specyfikację dystrybucji, którą chcesz zainstalować. Zainstaluję 64-bitową wersję Ubuntu 16.04 (nazwa kodowa xenial) tutaj:

5. Jeśli chcesz zainstalować obraz nieinteraktywnie, następująca komenda osiąga taki sam wynik jak powyżej:

[kod źródłowy] lxc-create -t ​​download -n ubu1 - -dist ubuntu -release xenial -arch amd64 [/ sourcecode]

6. LXC pobierze teraz i zainstaluje minimalny obraz Xenial systemu Ubuntu w systemie hosta. Pobieranie i instalacja może zająć trochę czasu w zależności od połączenia internetowego i prędkości komputera. Po instalacji pojawi się następujący ekran:

Jesteś teraz gotowy do korzystania z nowo skonfigurowanego kontenera Ubuntu.

Używanie wielu dystrybucji z kontenerami Linux

Uruchomienie kontenera

Uruchom swój kontener za pomocą polecenia lxc-start :

[kod źródłowy] lxc-start -n ubu1 -d [/ sourcecode]

W tym przypadku parametr -n określa nazwę kontenera, który chcesz uruchomić (w tym przypadku ubu1 ), a parametr -d powoduje, że działa on w tle .

Możesz sprawdzić, czy kontener został uruchomiony przy użyciu polecenia lxc-ls :

[kod źródłowy] lxc-ls -f [/ kod źródłowy]

Parametr -f umożliwia tworzenie elastycznych raportów. Tutaj widzisz, że mam dwa pojemniki - jeden Debian (zatrzymany) i jeden Ubuntu (działający).

Uzyskiwanie dostępu do kontenera i korzystanie z niego

Dostęp do konsoli kontenera można uzyskać za pomocą polecenia lxc-attach :

[kod źródłowy] lxc-attach -n ubu1 [/ sourcecode]

Będziesz mieć powłokę główną na swoim kontenerze. Zaleca się skonfigurowanie hasła dla użytkownika root i utworzenie zwykłego konta użytkownika :

[kod źródłowy] passwd
adduser beebom [/ sourcecode]

Oczywiście, zamień beebom na żądaną nazwę użytkownika. Następnie możesz zainstalować oprogramowanie i skonfigurować swój kontener tak, jak robisz to w zwykłym systemie. Na przykład w kontenerze Debiana lub Ubuntu:

[sourcecode] apt install wget openssh-server htop tmux nano iptables [/ sourcecode]

Zatrzymywanie kontenera

Po zakończeniu odtwarzania z kontenera użyj komendy exit aby powrócić do systemu hosta . Teraz użyj polecenia lxc-stop aby zatrzymać swój kontener :

[kod źródłowy] lxc-stop -n ubu1 [/ sourcecode]

Spowoduje to, że kontener zostanie całkowicie zamknięty i nie będzie zużywał więcej zasobów w systemie, z wyjątkiem miejsca na dysku.

Klonowanie i migawki

Klony

Po zainstalowaniu programów w kontenerze i skonfigurowaniu go według własnych upodobań możesz utworzyć jedną lub kilka kopii tego pliku , aby ułatwić sobie obsługę . Możesz to zrobić, tworząc klon, który jest dokładną repliką kontenera.

Na przykład, aby utworzyć klon kontenera ubu1 (nazwijmy go ubu2 ), najpierw zatrzymaj kontener za pomocą polecenia lxc-stop, a następnie użyj polecenia lxc-copy :

[kod źródłowy] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ sourcecode]

W tym przypadku opcja -n określa kontener źródłowy, a opcja -N określa nazwę klonu . Aby sprawdzić, czy kontener został sklonowany, użyj polecenia lxc-ls :

Migawki

Załóżmy, że zaraz zrobisz coś potencjalnie niebezpiecznego lub trudnego do odzyskania po zmianach w kontenerze, takich jak ponowna konfiguracja serwera WWW. Aby zminimalizować szkody, możesz utworzyć migawkę kontenera przed wprowadzeniem takiej zmiany. Jeśli coś pójdzie nie tak podczas konfiguracji, możesz po prostu zatrzymać pojemnik i przywrócić go do poprzedniego stanu roboczego, przywracając migawkę.

Aby utworzyć migawkę, najpierw zatrzymaj kontener :

[kod źródłowy] lxc-stop -n ubu1 [/ sourcecode]

Następnie utwórz migawkę za pomocą polecenia lxc-snapshot :

[kod źródłowy] lxc-snapshot -n ubu1 [/ sourcecode]

Spowoduje to utworzenie migawki o nazwie snap0 . Wszelkie kolejne migawki tworzone za pomocą tego polecenia będą nazywane snap1, snap2 itd.

Następnie możesz uruchomić kontener i wprowadzić żądane zmiany. Jeśli w dowolnym momencie chcesz powrócić do utworzonej migawki, zatrzymaj kontener i użyj polecenia lxc-snapshot z parametrem -r, aby przywrócić migawkę :

[kod źródłowy] lxc-snapshot -r snap0 -n ubu1 [/ sourcecode]

Spowoduje to przywrócenie migawki snap0 do kontenera ubu1 .

Automatyczne uruchamianie kontenerów przy rozruchu

Możesz utworzyć kontener, na przykład kontener serwera WWW, uruchamiać się automatycznie po uruchomieniu systemu. Aby to zrobić, przejdź do pliku konfiguracyjnego kontenera, znajdującego się w katalogu $HOME/.local/share/lxc//config, i dodaj następujące wiersze :

[kod źródłowy] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

Pierwszy wiersz określa, że ​​kontener powinien być uruchamiany podczas rozruchu. Drugi mówi systemowi, aby odczekał 5 sekund przed uruchomieniem następnego pojemnika, jeśli taki istnieje.

Rozwiązywanie problemów

Jeśli masz problemy z uruchamianiem kontenerów, pierwszą rzeczą, którą należy wypróbować, jest uruchomienie polecenia lxc-start w trybie pierwszego planu . Na przykład:

[kod źródłowy] lxc-start -n ubu1 -F [/ kod źródłowy]

Spowoduje to wyświetlenie błędów na bieżącym konsolecie e, co jest bardzo przydatne w identyfikacji natury problemu.

Problemy z jednoczesnym uruchamianiem wielu kontenerów

Jeśli spróbujesz uruchomić wiele kontenerów jednocześnie, mogą pojawić się błędy, takie jak "Osiągnięty przydział" lub "nie udało się utworzyć skonfigurowanej sieci". Dzieje się tak dlatego, że masz więcej interfejsów sieciowych niż przydzielonych Tobie. Możesz zwiększyć liczbę mostów sieciowych, które użytkownik może uruchomić, modyfikując /etc/lxc/lxc-usernet jako root . Może wyglądać mniej więcej tak:

[kod źródłowy] # USERNAME TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ sourcecode]

Możesz zmienić liczbę na końcu (5 w tym przykładzie), na większą liczbę, na przykład 10. Pozwoli to na jednoczesne uruchomienie do 10 kontenerów.

Inne zastosowania kontenerów Linux

Kontenery Linux mają różne zastosowania. Można ich używać jako lekkich pól testowych, na przykład do przetestowania różnych konfiguracji serwera WWW lub bazy danych przed wprowadzeniem ich do serwera produkcyjnego. Innym przykładem użycia jest sprawdzenie, w jaki sposób aplikacja działa na różnych wersjach różnych dystrybucji.

Możesz także użyć ich do odizolowania aplikacji, którym nie ufasz - każda taka szkoda zostanie ograniczona do własnego kontenera i nie wpłynie na system hosta. Należy pamiętać, że chociaż możliwe jest uruchamianie aplikacji GUI w kontenerze, to wymaga to dużo czasu i wysiłku, dlatego nie jest zalecane. Jeśli chcesz uruchamiać aplikacje GUI w piaskownicy, zapoznaj się z naszym artykułem dotyczącym piaskowania aplikacji w systemie Linux.

Uruchom wiele stacji dystrybucyjnych jednocześnie z kontenerami Linux

W ten sposób kończy się nasze instrukcje dotyczące uruchamiania wielu dystrybucji systemu Linux na jednym komputerze, bez obciążania pełnowymiarowej maszyny wirtualnej. Użyteczność tej technologii jest ograniczona tylko twoją kreatywnością, więc możesz eksperymentować i odkrywać nowe przypadki użycia. Jeśli masz problemy z konfiguracją kontenerów, możesz zadać nam pytanie w sekcji komentarzy.

Top