webh.pl

Docker na VPS: instalacja i bezpieczeństwo

Jak uruchomić Docker na serwerze VPS webh: instalacja, pierwszy kontener, Docker Compose, udostępnianie aplikacji przez porty i domeny oraz bezpieczeństwo.

  • czytania
  • Zaktualizowano:
Oprogramowanie na serwerze Strony i aplikacje
Serwery VPS

Docker pozwala uruchamiać aplikacje w kontenerach: Lekkich, odizolowanych środowiskach, dzięki którym aplikacja działa tak samo niezależnie od konfiguracji serwera, a usługi nie wchodzą sobie w drogę. Serwery VPS webh działają w pełnej wirtualizacji KVM, z własnym jądrem systemu i dostępem root, więc Docker działa na nich bez ograniczeń. Ten poradnik prowadzi przez instalację, pierwsze kontenery i kwestie bezpieczeństwa.

Dlaczego Docker dobrze działa na VPS

Docker wymaga dostępu do jądra systemu i uprawnień administratora, czego nie daje hosting współdzielony. Na VPS masz jedno i drugie:

  • Pełną wirtualizację KVM z własnym jądrem, na którym Docker działa natywnie,
  • Dostęp root, który pozwala instalować i uruchamiać kontenery (opisujemy go w artykule o dostępie do VPS).

Jeśli wahasz się między hostingiem a VPS, różnice opisujemy w artykule hosting czy VPS. Docker to jeden z powodów, dla których projekty wymagające własnego środowiska wybierają VPS.

Instalacja Docker

  1. Połącz się z serwerem przez SSH i zaktualizuj system.
  2. Zainstaluj Docker oficjalnym skryptem instalacyjnym, który dobiera właściwe pakiety dla Twojej dystrybucji:
curl -fsSL https://get.docker.com | sh
  1. Włącz usługę Docker, żeby startowała razem z systemem:
sudo systemctl enable --now docker
  1. (Opcjonalnie) dodaj swojego użytkownika do grupy docker, żeby nie poprzedzać każdej komendy sudo:
sudo usermod -aG docker $USER

Po dodaniu do grupy wyloguj się i zaloguj ponownie, aby zmiana zaczęła obowiązywać.

Uwaga

Członkostwo w grupie docker jest równoważne uprawnieniom roota, bo pozwala uruchamiać kontenery z pełnym dostępem do systemu. Dodawaj do niej tylko zaufanych użytkowników.

Pierwszy kontener

Sprawdź, czy Docker działa, uruchamiając testowy kontener:

docker run hello-world

Docker pobierze obraz testowy i wyświetli komunikat potwierdzający. Listę działających kontenerów zobaczysz poleceniem:

docker ps

Docker Compose: Wiele kontenerów naraz

Realne aplikacje składają się zwykle z kilku usług (np. aplikacja i baza danych). Docker Compose pozwala opisać je w jednym pliku docker-compose.yml i uruchomić jednym poleceniem. Nowe wersje Docker mają Compose wbudowany jako podkomendę:

docker compose up -d

Polecenie wykonane w katalogu z plikiem docker-compose.yml uruchamia cały zestaw usług w tle. Zatrzymasz je przez docker compose down. To wygodny sposób na powtarzalne, łatwe do odtworzenia środowisko.

Udostępnianie aplikacji: Porty i domeny

Kontener jest domyślnie odizolowany, więc żeby aplikacja była dostępna z zewnątrz, mapujesz jej port na port serwera. Na przykład poniższe polecenie wystawia aplikację z kontenera (port 80) na porcie 8080 serwera:

docker run -d -p 8080:80 nazwa-obrazu

Aby aplikacja działała pod Twoją domeną i przez HTTPS, ustaw przed kontenerami serwer proxy (np. Nginx), który kieruje ruch z domen do odpowiednich kontenerów i obsługuje certyfikaty. Konfigurację reverse proxy opisujemy w artykule o Nginx jako reverse proxy, instalację Nginx w artykule o LEMP/LAMP, a darmowy SSL w poradniku o certyfikacie na VPS.

Uwaga

Docker zarządza regułami zapory samodzielnie i potrafi otworzyć opublikowany port, omijając reguły UFW. Oznacza to, że port wystawiony przez -p bywa dostępny z internetu, mimo że UFW go nie przepuszcza. Dlatego porty usług, które mają być dostępne tylko lokalnie (np. baza danych), publikuj wyłącznie na adresie 127.0.0.1 (np. -p 127.0.0.1:3306:3306). Zasady firewalla opisujemy w artykule o firewallu na VPS.

Dane: Wolumeny i kopie

Dane zapisane wewnątrz kontenera znikają po jego usunięciu. Aby je zachować (np. bazę danych czy pliki użytkowników), korzystaj z wolumenów, które trzymają dane poza kontenerem, na dysku serwera:

docker run -d -v nazwa-wolumenu:/sciezka/w/kontenerze nazwa-obrazu

Wolumeny obejmij swoją strategią kopii zapasowych. Jak działają kopie na VPS, opisujemy w artykule o kopiach VPS.

Zasoby, aktualizacje i bezpieczeństwo

Kontenery współdzielą zasoby (CPU, pamięć, dysk) całego serwera VPS, więc trzymaj rękę na pulsie:

  • Pamięć i dysk: wiele kontenerów i pobierane obrazy zajmują miejsce. Gdy zasobów brakuje, zwiększysz je zgodnie z artykułem o zmianie zasobów VPS, a dysk rozszerzysz według poradnika o powiększaniu partycji.
  • Aktualizuj obrazy. Korzystaj z aktualnych wersji obrazów, bo starsze mogą zawierać znane luki. Pobierzesz nowszą wersję przez docker pull nazwa-obrazu.
  • Ograniczaj uprawnienia. Tam, gdzie to możliwe, uruchamiaj aplikacje w kontenerze jako zwykły użytkownik, a nie root.
  • Zamykaj niepotrzebne porty. Wystawiaj na zewnątrz tylko te, które faktycznie muszą być dostępne. Ogólne zasady bezpieczeństwa serwera opisujemy w artykule o bezpieczeństwie VPS.

Najczęstsze pytania

Czy Docker działa na każdym VPS webh?

Tak. Serwery VPS działają w pełnej wirtualizacji KVM z własnym jądrem, więc Docker działa na nich natywnie. To różnica względem hostingu współdzielonego, na którym nie da się uruchomić Docker.

Czym kontener różni się od pełnej maszyny wirtualnej?

Kontener współdzieli jądro z serwerem i uruchamia tylko aplikację z jej zależnościami, więc jest lżejszy i startuje szybciej niż osobna maszyna wirtualna. Sam VPS jest maszyną wirtualną, a kontenery uruchamiasz wewnątrz niego.

Dlaczego moja baza w kontenerze jest dostępna z internetu mimo firewalla?

Bo Docker dodaje własne reguły zapory i potrafi ominąć UFW dla opublikowanych portów. Usługi, które mają być widoczne tylko lokalnie, publikuj na adresie 127.0.0.1, a nie na wszystkich interfejsach.

Gdzie znikają dane po restarcie kontenera?

Dane zapisane wewnątrz kontenera przepadają po jego usunięciu. Trwałe dane trzymaj w wolumenach, które przechowują je na dysku serwera niezależnie od cyklu życia kontenera, i obejmij je kopiami zapasowymi.