Bezpieczne środowisko oparte na dockerze

W dzisiejszym poście, przedstawię podstawową konfigurację która umożliwi na stworzenie gotowego i bezpiecznego środowiska out of box. Sam proces należy najlepiej wykonać po samej instalacji usługi dockera.


Zmiana lokalizacji maszyn

Na samym początku warto przenieść folder z maszynami na oddzielny dysk, by w razie wyczerpania zasobów dyskowych przez dockera, maszyna pozostała nadal stabilna. 

W tym celu należy najpierw zatrzymać wszelkie usługi dockerowe:

sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo systemctl stop containerd

Po czym przenosimy dotychczasowe dane z dockera na nowy dysk 

mv /var/lib/docker  /mnt/data/docker/

Dalej informujemy usługę, by korzystała z nowego folderu po przez wpis w /etc/docker/daemon.json

{
"data-root": "/mnt/data/docker"
}

Na koniec całej operacji, możemy uruchomić serwer i sprawdzić czy ustawienia zostały zastosowane:

systemctl start docker
docker info -f '{{ .DockerRootDir}}'

Instalacja w trybie rootless

Jest wysoce zalecana, ze względu na to że gdy którakolwiek maszyna zostanie skompromitowana przez napastników, sam serwer otrzyma kolejny bastion ochrony.

Aby zainstalować serwer dockera w tym trybie działania, wykonujemy jako root instalację wymaganych pakietów:

apt-get install -y dbus-user-session uidmap fuse-overlayfs
modprobe overlay permit_mounts_in_userns=1

Po czym sprawdzamy czy usługa slirp4netns działa poprawnie:

slirp4netns --version

Następnie dodajemy użytkownika na którym będzie działał nasz bezpieczny docker:

adduser dev-docker

Teraz najważniejsza uwaga, logowanie na tego użytkownika (np po przez su dev-docker), podczas instalacji wyzwala błąd. Po wielu poszukiwaniach, odkryłem że rozwiązaniem problemu jest zalogowanie się na niego bezpośrednio za pomocą ssh :)


Idąc dalej, możemy przejść do właściwej instalacji:

/usr/bin/dockerd-rootless-setuptool.sh install

Po całej operacji możemy również przenieść katalog dockera do innej lokalizacji bazując na pkt.1 (dla uproszczenia, przestawiam całą listę komend).

sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo systemctl stop containerd
mkdir /mnt/dane/docker-rootless
chown dev-docker:dev-docker /mnt/dane/docker-rootless
vim ~/.config/docker/daemon.json
systemctl --user start docker.service
docker info -f '{{ .DockerRootDir}}'

* zawartość pliku ~/.config/docker/daemon.json w tym przypadku zawiera:

{
"data-root": "/dane/docker-rootless"
}

Podsumowanie

Docker to niesamowicie potężne i elastyczne środowisko, przydatne zarówno do wdrożeń developerskich jak i na maszynach produkcyjnych.

Kamil Mirończuk

I kiedy czegoś gorąco pragniesz, to cały wszechświat sprzyja potajemnie twojemu pragnieniu
~Paulo Coelho

Komentarze

Zostaw komentarz

Twój adres mailowy NIE zostanie opublikowany. W razie otrzymania zapytania, otrzymasz na niego odpowiedź.
Wymagane pola są oznaczone jako *