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