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.
Komentarze