Docker na VPS krok po kroku: instalacja, Compose i pierwsza aplikacja

Docker na VPS krok po kroku: instalacja, Compose i pierwsza aplikacja (grafika wygenerowana przez AI)

Docker na VPS krok po kroku: instalacja, Compose i pierwsza aplikacja

Docker na własnym VPS-ie to najprostszy sposób, żeby uruchamiać kilka aplikacji obok siebie bez mieszania ich zależności. Ten poradnik prowadzi od czystego systemu do działającej aplikacji w Docker Compose. Po drodze pokazuje jedną pułapkę z firewallem, o której dokumentacja Dockera ostrzega wprost, a wielu początkujących i tak jej nie zauważa.

Jeśli zastanawiasz się jeszcze, czy VPS jest Ci w ogóle potrzebny, zajrzyj najpierw do wpisu do czego użyć serwera VPS.

Czego potrzebujesz na start

  • VPS z wirtualizacją KVM. Docker potrzebuje własnego jądra i pełnej kontroli nad siecią, dlatego na KVM działa bez kombinowania. Wszystkie serwery VPS w RapidDC działają na KVM i dają pełny dostęp administracyjny.
  • Debian 12 lub 13 albo aktualne Ubuntu. Oba systemy wybierzesz przy zamawianiu VPS-a w RapidDC.
  • Dostęp przez SSH na koncie z uprawnieniami sudo. Jeśli logujesz się pierwszy raz, pomoże wpis jak połączyć się z serwerem VPS przez SSH.

Ile zasobów? Sam Docker zużywa niewiele. Liczy się to, co w nim uruchomisz. Do nauki i jednej lekkiej aplikacji wystarczy mały plan. Kilka usług z bazą danych szybciej zje RAM i dysk. Przy takich projektach lepiej sprawdzi się linia VPS NVMe na procesorach AMD EPYC. Plan Light ma 1 vCPU, 2 GB RAM i 20 GB NVMe, a plan Rapid 2 vCPU, 4 GB RAM i 50 GB NVMe. Liczbę rdzeni i ilość RAM w VPS-ie RapidDC można zmienić na każdym etapie, więc nie musisz trafić z rozmiarem za pierwszym razem.

Krok 1: zainstaluj Dockera z oficjalnego repozytorium

Pakiet docker.io z repozytorium systemu bywa starszy niż wydania Dockera. Dlatego instalujemy z repozytorium Dockera, dokładnie tak, jak opisuje to dokumentacja projektu dla Debiana.

Najpierw klucz i źródło pakietów:

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Na Ubuntu zamień debian na ubuntu w obu adresach. Potem sama instalacja:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Sprawdź, czy działa:

sudo systemctl status docker
sudo docker run hello-world

Jeśli zobaczysz komunikat powitalny, Docker pobrał obraz i uruchomił kontener.

Docker bez sudo? Z głową

Polecenie sudo usermod -aG docker $USER pozwala używać Dockera bez sudo. Pamiętaj jednak, że członek grupy docker ma w praktyce uprawnienia roota na serwerze. Dodawaj do niej tylko własne konto administracyjne, nigdy konta aplikacji czy współpracowników, którzy nie powinni mieć pełnego dostępu.

Krok 2: pierwsza aplikacja w Docker Compose

Pojedyncze polecenia docker run szybko robią się nieczytelne. Docker Compose zapisuje całą konfigurację w jednym pliku, który możesz trzymać w repozytorium i odtworzyć na innym serwerze.

Na przykład uruchomimy Uptime Kuma, lekkie narzędzie do monitorowania stron. Utwórz katalog i plik compose.yaml:

mkdir -p ~/apps/uptime-kuma && cd ~/apps/uptime-kuma
nano compose.yaml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    volumes:
      - ./data:/app/data

Uruchom i sprawdź stan:

docker compose up -d
docker compose ps
docker compose logs -f

Trzy linijki w tym pliku robią ważną robotę. restart: unless-stopped podnosi kontener po restarcie serwera. Wolumen ./data trzyma dane poza kontenerem, więc usunięcie i odtworzenie kontenera ich nie kasuje. A zapis 127.0.0.1:3001:3001 zamiast samego 3001:3001 to temat następnego kroku.

Krok 3: nie wystawiaj portów obok firewalla

To najczęstszy błąd przy Dockerze na VPS-ie. Włączasz UFW, blokujesz wszystko poza SSH, a panel aplikacji i tak otwiera się z internetu. Dokumentacja Dockera mówi to wprost: porty kontenerów wystawione przez Dockera omijają reguły ufw i firewalld, bo Docker sam dopisuje swoje reguły do iptables. Ta sama dokumentacja zaznacza, że reguły tworzone przez nft nie są wspierane na systemie z Dockerem.

Co z tym zrobić:

  • Wiąż porty z 127.0.0.1, jak w przykładzie wyżej. Usługa jest wtedy dostępna tylko z samego serwera.
  • Do panelu wchodź przez tunel SSH. Na swoim komputerze uruchom ssh -L 3001:127.0.0.1:3001 uzytkownik@IP_SERWERA i otwórz w przeglądarce http://localhost:3001.
  • Publiczne usługi wystawiaj przez reverse proxy (Nginx, Caddy, Traefik) z certyfikatem SSL na portach 80 i 443, a aplikacje za nim zostaw na 127.0.0.1.

Więcej o tym, co firewall robi, a czego nie, znajdziesz we wpisie czym jest zapora sieciowa i czy musisz ją mieć.

Krok 4: ogranicz logi, zanim zapchają dysk

Domyślnie Docker zapisuje logi kontenerów w plikach JSON bez limitu rozmiaru. Gadatliwa aplikacja potrafi po kilku tygodniach zająć sporą część małego dysku. Utwórz plik /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Następnie sudo systemctl restart docker. Ustawienie obejmuje kontenery tworzone od tej chwili, więc istniejące odtwórz poleceniem docker compose up -d --force-recreate.

Miejsce zajmowane przez obrazy, kontenery i wolumeny sprawdzisz poleceniem docker system df.

Krok 5: aktualizacje i kopie zapasowe

Aktualizacja aplikacji z Compose to dwa polecenia w katalogu projektu:

docker compose pull
docker compose up -d
docker image prune

Ostatnie usuwa stare, nieużywane obrazy, które po aktualizacjach zostają na dysku.

Przy backupie pamiętaj, że kontener jest jednorazowy, a wartość mają dane. Kopiuj katalogi wolumenów (w przykładzie ~/apps/uptime-kuma/data) i pliki compose.yaml. Bazy danych zrzucaj ich własnymi narzędziami, na przykład mysqldump albo pg_dump, zamiast kopiować pliki działającej bazy. Kopię trzymaj poza serwerem. W RapidDC możesz dokupić do VPS-a plan backupu, od Backup.Standard do Backup.Mega.

Jeśli planujesz na tym samym VPS-ie testować nowe wersje aplikacji, rozważ osobne środowisko. Piszemy o tym we wpisie VPS dla środowiska testowego.

Podsumowanie

Docker na VPS-ie to pięć kroków: instalacja z oficjalnego repozytorium, aplikacja opisana w compose.yaml, porty przypięte do 127.0.0.1 lub schowane za reverse proxy, limit logów i regularny backup wolumenów. Jeśli zrobisz tylko jedną rzecz z tej listy ponad instalację, niech to będzie krok 3.

Potrzebujesz serwera pod kontenery? Sprawdź serwery VPS NVMe w RapidDC z procesorami AMD EPYC i darmową, nielimitowaną reinstalacją systemu. Na plany Rapid i Hyper działa teraz kod PROMONVME20, który obniża cenę o 20% w pierwszym okresie rozliczeniowym. Aktualne kody znajdziesz na stronie promocji.

FAQ – najczęściej zadawane pytania o Dockera na VPS

Czy na VPS-ie w RapidDC mogę zainstalować Dockera?

Tak. VPS-y RapidDC działają na wirtualizacji KVM i dają pełny dostęp administracyjny, więc Dockera instalujesz tak samo jak na fizycznym serwerze z Debianem lub Ubuntu. Instalację najlepiej przeprowadzić z oficjalnego repozytorium Dockera.

Dlaczego mój kontener jest dostępny z internetu, mimo że UFW blokuje port?

Docker dopisuje własne reguły iptables dla wystawionych portów, więc omijają one reguły ufw. Przypnij port do adresu 127.0.0.1 w pliku compose.yaml, a publiczne usługi wystaw przez reverse proxy na portach 80 i 443.

Ile RAM potrzebuje VPS pod Dockera?

Sam Docker zużywa niewiele, więc decyduje suma aplikacji, które uruchomisz. Do nauki i jednej lekkiej usługi wystarczy mały plan. Przy kilku kontenerach z bazą danych wybierz więcej pamięci. W RapidDC ilość RAM i rdzeni można zwiększyć w dowolnym momencie.

Czy dane znikną, gdy usunę kontener?

Znikną, jeśli trzymasz je wewnątrz kontenera. Dlatego dane aplikacji zapisuj w wolumenach lub katalogach podpiętych z serwera, jak ./data w przykładzie z poradnika. Takie katalogi przetrwają usunięcie i ponowne utworzenie kontenera.

Docker Compose czy pojedyncze polecenia docker run?

Na serwerze lepiej sprawdza się Docker Compose. Cała konfiguracja jest w jednym pliku, który łatwo wersjonować, skopiować na inny VPS i odtworzyć jednym poleceniem docker compose up -d.


Artykuł powstał z wykorzystaniem narzędzi sztucznej inteligencji (AI) pod nadzorem zespołu RapidDC. Grafika ilustracyjna została wygenerowana przez AI.