Kontenery Linux (LXC) to lekka technologia wirtualizacji i mają różne zastosowania. Jest częścią jądra Linuksa i umożliwia emulację jednej lub wielu dystrybucji Linuksa na jednym hoście Linuksa. Pomyśl o tym jako o pośredniej płaszczyźnie między chrootem a technologiami pełnej wirtualizacji, takimi jak VirtualBox, KVM lub Xen. Podobną technologią obecną w świecie BSD są Jails FreeBSD.
Na przykład maszyna, na której piszę, to laptop z systemem Linux Mint 18, zasilany przez procesor Intel Atom i ma skromne 2 GB pamięci RAM. Mimo to korzystam z trzech kontenerów Linuksa, z których każdy ma uruchomioną instancję serwera WWW Apache, bez dużego spadku 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 swoim systemie Linux, Linux Containers powinny wykonać to zadanie za Ciebie..
Instalowanie i konfigurowanie kontenerów Linuksa
Konfigurujemy LXC na Linux Mint 18 w wersji 64-bitowej. Podane tutaj instrukcje instalacji będą działać również bez zmian w systemie Ubuntu 16.04 i nowszych. Jeśli używasz innej dystrybucji, zapoznaj się z oficjalną dokumentacją dystrybucji, jeśli coś nie działa zgodnie z oczekiwaniami. Zakłada się również znajomość wiersza poleceń i ogólne rozwiązywanie problemów.
Wymagania wstępne
Oto kilka rzeczy, które należy skonfigurować, aby rozpocząć korzystanie z wielu dystrybucji:
1. Zainstaluj LXC i inne wymagane oprogramowanie przy użyciu:
[kod źródłowy] sudo apt install lxc lxc-templates uidmap [/ sourcecode]
2. Teraz musisz skonfiguruj swój profil. Wprowadź następujące polecenia, aby go skonfigurować:
[kod źródłowy] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; amp; amp; gt;& amp; amp; 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 następująco:
[kod źródłowy] sudo usermod -add-subuids 100000-165536 $ USER
sudo usermod -add-subgids 100000-165536 $ USER
sudo cgm utwórz wszystkich użytkowników
sudo cgm chown all user $ (id -u) $ (id -g)
cgm movepid all user $$ [/ sourcecode]
Konfigurowanie kontenera
Teraz, gdy masz już zainstalowany LXC Container wraz z innym wstępnie wymaganym oprogramowaniem, oto kroki, 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 download -name ubu1 [/ sourcecode]
2. Tutaj -szablon
parametr mówi lxc do Ściągnij wstępnie skonfigurowany obraz z Internetu, podczas -Nazwa
parametr określa nazwę kontenera - ubu1
w tym przypadku. Możesz użyć dowolnej nazwy.
3. Zobaczysz teraz listę obsługiwane obrazy dystrybucji:
4. Podaj szczegóły dystrybucji które chcesz zainstalować. Zainstaluję 64-bitową wersję Ubuntu 16.04 (nazwa kodowa xenial) tutaj:
5. Jeśli chcesz zainstaluj obraz nieinteraktywnie, następująca komenda daje taki sam rezultat jak powyższe:
[kod źródłowy] lxc-create -t download -n ubu1 - -dist ubuntu -release xenial -arch amd64 [/ kod źródłowy]
6. LXC pobierze teraz i zainstaluje minimalny obraz xenial Ubuntu w systemie hosta. Pobieranie i instalacja może zająć trochę czasu, w zależności od połączenia internetowego i szybkości komputera. Po instalacji, zobaczysz taki ekran:
Jesteś teraz gotowy do użycia nowo skonfigurowanego kontenera Ubuntu.
Używanie wielu dystrybucji z kontenerami Linuksa
Uruchamianie kontenera
Uruchom kontener przy użyciu lxc-start
Komenda:
[kod źródłowy] lxc-start -n ubu1 -d [/ kod źródłowy]
Tutaj -n
parametr określa nazwę kontenera że chcesz zacząć (ubu1
w tym przypadku) i -re
parametr sprawia, że działa w tle.
Możesz sprawdzić, czy kontener został uruchomiony przy użyciu lxc-ls
Komenda:
[kod źródłowy] lxc-ls -f [/ kod źródłowy]
Plik -fa
parametr włącza fantazyjny raportowanie. Tutaj widać, że mam dwa pojemniki - jeden Debian (zatrzymany) i jeden Ubuntu (uruchomiony).
Dostęp do kontenera i korzystanie z niego
Możesz uzyskać dostęp do konsoli kontenera używając lxc-attach
Komenda:
[kod źródłowy] lxc-attach -n ubu1 [/ kod źródłowy]
Będziesz mieć teraz plik skorupa roota na twoim pojemniku. Zaleca się ustawienie hasła dla użytkownika root i utwórz zwykłe konto użytkownika:
[kod źródłowy] hasło
adduser beebom [/ kod źródłowy]
Oczywiście wymień beebom z wybraną nazwą użytkownika. Następnie możesz zainstalować oprogramowanie i skonfigurować kontener, tak jak w zwykłym systemie. Na przykład w kontenerze Debiana lub Ubuntu:
[kod źródłowy] apt install wget openssh-server htop tmux nano iptables [/ sourcecode]
Zatrzymywanie pojemnika
Po zakończeniu zabawy z kontenerem użyj pliku Wyjście
Komenda aby powrócić do systemu hosta. Teraz użyj lxc-stop
Komenda zatrzymać swój pojemnik:
[kod źródłowy] lxc-stop -n ubu1 [/ kod źródłowy]
Spowoduje to czyste zamknięcie kontenera 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 chcieć utworzyć jedną lub wiele kopii tego dla łatwej obsługi administracyjnej. Możesz to zrobić, tworząc plik klon, który jest dokładną repliką pojemnika.
Na przykład, aby utworzyć klon pliku ubu1
pojemnik (nazwijmy to ubu2
), najpierw zatrzymaj pojemnik za pomocą lxc-stop
, następnie użyj lxc-copy
Komenda:
[kod źródłowy] lxc-stop -n ubu1
lxc-copy -n ubu1 -N ubu2 [/ kod źródłowy]
Tutaj -Opcja n określa kontener źródłowy, i -Opcja N określa nazwę klonu. Do zweryfikować że kontener został sklonowany, użyj rozszerzenia lxc-ls
Komenda:
Migawki
Załóżmy, że masz zamiar dokonać pewnych potencjalnie niebezpiecznych lub trudnych do odzyskania zmian po zmianach w kontenerze, takich jak ponowna konfiguracja serwera WWW. Aby zminimalizować szkody, możesz utworzyć migawkę kontenera przed dokonaniem takiej zmiany. Jeśli podczas konfiguracji coś pójdzie nie tak, możesz po prostu zatrzymać kontener i przywrócić go do poprzedniego stanu roboczego, przywracając migawkę.
Aby utworzyć migawkę, najpierw zatrzymać pojemnik:
[kod źródłowy] lxc-stop -n ubu1 [/ kod źródłowy]
Następnie, utwórz migawkę używając lxc-snapshot
Komenda:
[kod źródłowy] lxc-snapshot -n ubu1 [/ kod źródłowy]
Tworzy to migawkę o nazwie snap0
. Wszelkie kolejne migawki utworzone za pomocą tego polecenia zostaną wywołane snap1, snap2, itp.
Po tym możesz początek kontener i wprowadź żądane zmiany. Jeśli w dowolnym momencie zechcesz wrócić do utworzonej migawki, zatrzymać pojemnik i użyj lxc-snapshot
polecenie z -r
parametr do przywrócić migawkę:
[kod źródłowy] lxc-snapshot -r snap0 -n ubu1 [/ kod źródłowy]
Spowoduje to przywrócenie migawki snap0
do ubu1
pojemnik.
Automatyczne uruchamianie kontenerów podczas rozruchu
Możesz sprawić, by kontener, na przykład kontener serwera WWW, uruchamiał się automatycznie po uruchomieniu systemu. Aby to zrobić, przejdź do plik konfiguracyjny kontenera, położony w $ HOME / .local / share / lxc /
, i dodaj następujące wiersze:
[kod źródłowy] lxc.start.auto = 1
lxc.start.delay = 5 [/ kod źródłowy]
Pierwsza linia określa, że kontener powinien być uruchamiany podczas rozruchu. Drugi nakazuje systemowi poczekaj 5 sekund przed uruchomieniem następnego pojemnika, jeśli taki istnieje.
Rozwiązywanie problemów
Jeśli masz problemy z uruchomieniem kontenerów, pierwszą rzeczą do wypróbowania jest uruchomienie lxc-start
polecenie w Pierwszoplanowy tryb. Na przykład:
[kod źródłowy] lxc-start -n ubu1 -F [/ kod źródłowy]
To będzie pokażę błędy w bieżącej konsolie, co jest bardzo przydatne w określaniu natury problemu.
Problemy z jednoczesnym uruchamianiem wielu kontenerów
Jeśli spróbujesz uruchomić wiele kontenerów jednocześnie, możesz zobaczyć błędy takie jak „Osiągnięto limit” lub „Nie udało się utworzyć skonfigurowanej sieci”. Dzieje się tak, ponieważ korzystasz z większej liczby interfejsów sieciowych, niż zostało Ci przydzielone. Możesz zwiększyć liczbę mostów sieciowych, które użytkownik może uruchomić modyfikując plik / etc / lxc / lxc-usernet
plik jako korzeń. Może to wyglądać mniej więcej tak:
[kod źródłowy] # LICZBA MOSTÓW TYP NAZWY UŻYTKOWNIKA
beebom veth lxcbr0 5 [/ kod źródłowy]
Możesz zmienić numer na końcu (W tym przykładzie 5) na większą liczbę, np. 10. To pozwoli ci uruchomić do 10 kontenerów na raz.
Inne zastosowania kontenerów Linuksa
Kontenery Linux mają różne zastosowania. Można ich używać jako lekkich pudełek testowych, na przykład do testowania różnych konfiguracji serwera WWW lub bazy danych przed wysłaniem ich do serwera produkcyjnego. Innym przypadkiem użycia jest sprawdzenie, jak aplikacja działa w różnych wersjach różnych dystrybucji.
Możesz ich również użyć do odizolowania aplikacji, którym nie ufasz - wszelkie szkody, które taka aplikacja wyrządzi, będą ograniczone do jej własnego kontenera i nie wpłyną na system hosta. Należy pamiętać, że chociaż możliwe jest uruchamianie aplikacji GUI w kontenerze, zajmuje 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 na temat korzystania z aplikacji piaskownicy w systemie Linux.
ZOBACZ TAKŻE: 7 najlepszych alternatyw VirtualBox, których możesz użyć
Uruchamiaj wiele dystrybucji jednocześnie z kontenerami Linuksa
W ten sposób kończy się nasz poradnik dotyczący uruchamiania wielu dystrybucji Linuksa na jednym komputerze, bez narzutu pełnowymiarowej maszyny wirtualnej. Użyteczność tej technologii jest ograniczona tylko twoją kreatywnością, więc nie krępuj się eksperymentować i odkrywać nowe przypadki użycia. Jeśli masz problemy z konfiguracją kontenerów, możesz zadać nam pytanie w sekcji komentarzy.