Kontenery Docker w technikum informatycznym

Na jednym z przedmiotów jakie mam okazję uczyć w technikum informatycznym przybliżam przyszłym informatykom Linuxa. Do tej pory pracowali oni na wirtualnych maszynach odpalanych w VirtualBoxie. W celu samorozwoju (i nie tylko, ale o tym za chwilę) uruchomiłem serwer, na którym utworzyłem kontenery Dockerowe dla uczniów z systemem Ubuntu. Wykorzystałem tę dystrybucję, ponieważ akurat na niej zdają swój pierwszy egzamin na technika. W tym celu przygotowałem dockerfile, na podstawie którego utworzyłem spersonalizowany pod nich obraz, a następnie utworzyłem skrypty bashowe, do automatycznego tworzenie i kasowania kontenerów.
Jaka z tego korzyść dla techników? Przećwiczą wykorzystanie SSH do zarządzania serwerami (zdalnymi, VPS, dedykami,…) oraz prace z portami.

DockerFile, na podstawie którego został utworzony odpowiedni obraz:

     FROM ubuntu:latest
     LABEL maintainer=”WOJST”

     RUN apt update && apt upgrade -y \
     && yes| unminimize \
     && apt install -y nano ssh \
     && echo 'root:root’ | chpasswd \
     && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g’ /etc/ssh/sshd_config \
     && sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g’ /etc/ssh/sshd_config \
     && sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/g’ /etc/ssh/sshd_config \
     && apt-get install -y systemd systemd-sysv dbus dbus-user-session

      ENTRYPOINT [„/sbin/init”]

Szybka analiza powyższego pliku:

– wykorzystujemy najnowszą wersję Ubuntu
– poleceniem RUN wykonujemy: aktualizacje systemu, wyłączenie minimalnej wersji serwerowej, instalacje edytora plików nano (na którym pracują) oraz ssh. Następnie ustawiamy hasło dla konta root i modyfikujemy plik ssh, aby dopuszczał logowanie bezpośrednio na roota (PRAKTYKOWANE JEDYNIE W ŚRODOWISKU TESTOWYM !). Na samym końcu instalujemy i uruchamiany systemctl, dzięki któremu zarządzają usługami

Po utworzeniu odpowiedniego obrazu nadszedł czas na utworzenie kontenerów. W tym celu został wyrzeźbiony skrypt w bashu create_containers.sh:

     #!/bin/bash

     for i in {1..30}
     do
        portssh=$((2000+$i))
        porthttp=$((8000+$i))
        docker container run –privileged -h 3ti-$i -itd -p $portssh:22 -p $porthttp:80 –name 3ti_$i wojst_technikum /bin/bash
     done

Szybka analiza powyższego pliku:

Wykonywana jest zwykła pętla for, która inkrementuje po numerach z dziennika. Wewnątrz niej zdefiniowałem dwie zmienne (numery portów dla SSH oraz WWW) i tworzenie samego kontenera. Każdy kontener jako hostname oraz nazwe samego kontenera przyjmuje 3ti_numer z dziennika, przekierowane ma również dwa porty na te zdefiniowane w zmiennych.

Do szybkiego usuwania (tak, wiem że można przez portainera np. 😉) drugi skrypt remove_containers.sh:

     #!/bin/bash

     for i in {1..30}
     do
        docker container rm -f 3ti_$i
     done

W tym przypadku chyba nie ma co opowiadać – pętla for na takiej samej zasadzie jak powyżej.

Podczas wdrażania tego rozwiązania pojawił się problem przedstawiony na poniższym zrzucie. Spowodowany był jednoczesnym uruchomieniem 30 kontenerów. W celu rozwiązania go konieczne było zmodyfikowanie parametru kernela poleceniem: sysctl -w fs.inotify.max_user_instances=8192 >> /etc/sysctl.conf

Błąd pojawiający się w momencie odpalenia zbyt wielu kontenerów - Too many open files

Pierwszym testem kontenerów była instalacja WordPressa, o której wspomniałem w innym wpisie.

Kolejnym krokiem będzie kontynuacja nauki Ansible 😉

W celu świadczenia usług na najwyższym poziomie stosujemy pliki cookies, które będą zamieszczane w Państwa urządzeniu (komputerze, laptopie, smartfonie). W każdym momencie mogą Państwo dokonać zmiany ustawień Państwa przeglądarki internetowej i wyłączyć opcję zapisu plików cookies. View more
Zaakceptuj