SAPO DASHBOARD – DOCKER CHEATSHEET

Dockerfile

FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5003

CMD ["gunicorn", "--bind", "0.0.0.0:5003", "--workers", "2", "--threads", "4", "run:app"]

.dockerignore.txt

venv/
__pycache__/
*.pyc
.git/
.env

Katalog projektu

Wszystkie ponizsze komendy uruchamiaj w katalogu projektu, czyli tam,
gdzie znajduja sie Dockerfile, requirements.txt i run.py.

Sprawdzenie plikow:

Get-ChildItem
  1. Przygotowanie obrazu Docker

Budowa obrazu:

docker build -t sapo-dashboard .

Komentarze do parametrow:

docker                 uruchamia klienta Docker.
build                  buduje obraz na podstawie Dockerfile.
-t sapo-dashboard      nadaje obrazowi nazwe/tag sapo-dashboard.
.                      oznacza biezacy katalog jako kontekst budowania;
                       Docker moze odczytac z niego Dockerfile i pliki
                       kopiowane instrukcja COPY.

Obraz jest szablonem aplikacji. Samo jego zbudowanie nie uruchamia kontenera.

Budowa od zera, bez uzywania cache:

docker build --no-cache -t sapo-dashboard .

Parametr –no-cache wymusza wykonanie wszystkich krokow od poczatku.
Przydaje sie, gdy Docker uzywa starej warstwy lub gdy zmienily sie
zaleznosci. Budowa trwa wtedy dluzej.

Po zmianie kodu lub requirements.txt wykonaj ponownie docker build.

Gunicorn musi znajdowac sie w requirements.txt, poniewaz Dockerfile uruchamia:

gunicorn --bind 0.0.0.0:5003 --workers 2 --threads 4 run:app

Komentarze do parametrow Gunicorna:

--bind 0.0.0.0:5003  nasluchuj na porcie 5003 na wszystkich interfejsach
                      kontenera; 0.0.0.0 jest wazne w Dockerze.
--workers 2           uruchom dwa procesy robocze obslugujace zadania.
--threads 4           uruchom cztery watki w kazdym workerze.
run:app               wczytaj zmienna app z pliku/modulu run.py.

Port po lewej stronie -p jest portem Windowsa, a port po prawej stronie
jest portem wewnatrz kontenera. Gunicorn musi nasluchiwac na tym drugim.

  1. Pierwsze uruchomienie z plikiem .env

docker run -d --name sapo-dashboard `
  --env-file .env `
  -p 5003:5003 `
  --restart unless-stopped `
  sapo-dashboard

Komentarze do parametrow:

run                      utworz nowy kontener z obrazu i go uruchom.
-d                       uruchom w tle (detached); terminal pozostaje
                         dostepny, a aplikacja dziala w tle.
--name sapo-dashboard    ustaw stala, latwa do uzycia nazwe kontenera.
--env-file .env          wczytaj zmienne z pliku .env podczas tworzenia
                         kontenera. Te wartosci zostana zapisane w jego
                         konfiguracji i nie zmienia ich pozniejsze
                         edytowanie pliku .env.
-p 5003:5003             przekieruj port 5003 Windowsa na port 5003
                         wewnatrz kontenera. Lewa wartosc to port lokalny.
--restart unless-stopped uruchamiaj ponownie kontener po awarii lub
                         restarcie Dockera, chyba ze zatrzymano go recznie.
sapo-dashboard           obraz, z ktorego ma powstac kontener.

Znak ` na koncu linii jest kontynuacja polecenia w PowerShellu. Pozwala
zapisac jedno dlugie polecenie w kilku wierszach.

Polecenie docker run wykonuje sie tylko przy pierwszym tworzeniu kontenera.
Jesli kontener o tej nazwie juz istnieje, uzyj docker start.

Aplikacja bedzie dostepna pod adresem:

http://localhost:5003

Znaczenie opcji:

-d                         uruchomienie w tle
--name                     nazwa kontenera
--env-file .env            zaladowanie zmiennych z pliku .env
-p 5003:5003               port komputera:port kontenera
--restart unless-stopped   automatyczny restart kontenera

Nie dodawaj pliku .env do obrazu ani do repozytorium.

  1. Kolejne uruchomienie istniejacego kontenera

Jesli kontener zostal juz utworzony, nie uzywaj ponownie docker run.
Uzyj:

docker start sapo-dashboard

Komentarze do parametrow:

start                    uruchom istniejacy, zatrzymany kontener.
sapo-dashboard            nazwa kontenera ustawiona w docker run.

docker start nie tworzy nowego kontenera, nie czyta ponownie pliku .env
i nie zmienia obrazu. Korzysta z konfiguracji zapisanej podczas docker run.

Status kontenera:

docker ps

Polecenie docker ps pokazuje tylko aktualnie dzialajace kontenery.
Najwazniejsze informacje to STATUS oraz PORTS, np. 0.0.0.0:5003->5003/tcp.

Status wszystkich kontenerow, takze zatrzymanych:

docker ps -a

Parametr -a (all) pokazuje rowniez kontenery zatrzymane. Przydaje sie,
gdy docker start nie dziala albo trzeba sprawdzic istniejaca nazwe kontenera.

  1. Zmienne srodowiskowe

Lista zmiennych zapisanych w konfiguracji kontenera:

docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' sapo-dashboard

Komentarze do polecenia:

inspect                  pokaz szczegolowa konfiguracje obiektu Docker.
--format                  ogranicz wynik do wybranego formatu Go template.
.Config.Env              wybierz zmienne zapisane w konfiguracji kontenera.
range ... println        wypisz kazda zmienna w osobnej linii.

!! To polecenie moze pokazac hasla i tokeny. Nie wklejaj jego pelnego wyniku
na publiczne fora ani do repozytorium.
!!!

UWAGA

Lista zmiennych odczytanych wewnatrz dzialajacego kontenera:

docker exec sapo-dashboard env

Komentarze do parametrow:

exec                     wykonaj polecenie wewnatrz dzialajacego kontenera.
sapo-dashboard            wskaz kontener, w ktorym ma byc wykonane polecenie.
env                       wyswietl zmienne srodowiskowe procesu w kontenerze.

Sprawdzenie pojedynczej zmiennej:

docker exec sapo-dashboard printenv MYSQL_HOST
docker exec sapo-dashboard printenv MYSQL_DB

printenv odczytuje jedna wskazana zmienna. Jest bezpieczniejsze do diagnostyki
niz wyswietlanie calego srodowiska, szczegolnie gdy chcesz sprawdzic tylko host
lub nazwe bazy.

Podglad lokalnego pliku .env:

Get-Content .env

Wazne: zmiana pliku .env nie zmienia zmiennych w istniejacym kontenerze.
Po zmianie .env trzeba usunac i utworzyc kontener ponownie.

  1. Logi

Ostatnie logi kontenera:

docker logs --tail 100 sapo-dashboard

Komentarze do parametrow:

logs                    pokaz standardowe wyjscie i bledy kontenera.
--tail 100              pokaz tylko ostatnich 100 linii.
sapo-dashboard           nazwa kontenera, ktorego logi chcesz zobaczyc.

Logi na zywo:

docker logs -f sapo-dashboard

Parametr -f (follow) pozostawia polecenie aktywne i dopisuje nowe logi
na zywo. Zatrzymaj podglad klawiszami Ctrl+C; nie zatrzyma to kontenera.

Logi na zywo z ostatnimi 100 liniami:

docker logs -f --tail 100 sapo-dashboard

Zatrzymanie podgladu logow: Ctrl+C

  1. Zatrzymanie i uruchomienie

Zatrzymanie kontenera:

docker stop sapo-dashboard

stop wysyla do procesu kontenera sygnal zakonczenia i zatrzymuje go,
ale nie usuwa kontenera ani jego konfiguracji.

Uruchomienie zatrzymanego kontenera:

docker start sapo-dashboard

Restart kontenera:

docker restart sapo-dashboard

restart wykonuje stop, a nastepnie start tego samego kontenera.

  1. Zastosowanie zmienionego pliku .env

Usun istniejacy kontener:

docker rm -f sapo-dashboard

Komentarze do parametrow:

rm                      usun kontener.
-f                      wymus usuniecie; zatrzymaj kontener, jesli dziala.
sapo-dashboard           kontener przeznaczony do usuniecia.

Po usunieciu kontenera znikaja zapisane w nim zmienne z .env. Obraz pozostaje
nienaruszony, dlatego mozna na jego podstawie utworzyc nowy kontener.

Utworz go ponownie z aktualnym .env:

docker run -d --name sapo-dashboard `
  --env-file .env `
  -p 5003:5003 `
  --restart unless-stopped `
  sapo-dashboard
  1. Przebudowa po zmianie kodu

docker build -t sapo-dashboard .
docker rm -f sapo-dashboard
docker run -d --name sapo-dashboard `
  --env-file .env `
  -p 5003:5003 `
  --restart unless-stopped `
  sapo-dashboard

Kolejnosc ma znaczenie: najpierw budujesz nowy obraz, potem usuwasz stary
kontener, a na koncu tworzysz kontener ponownie z aktualnego obrazu i .env.

  1. Usuwanie kontenera i obrazu

Usuniecie zatrzymanego kontenera:

docker rm sapo-dashboard

Usuniecie kontenera niezaleznie od jego stanu:

docker rm -f sapo-dashboard

Lista obrazow:

docker images

Usuniecie obrazu:

docker rmi sapo-dashboard

rmi (remove image) usuwa obraz. Nie usuwaj obrazu, jesli dzialajacy kontener
jest od niego zalezny lub jesli planujesz ponownie uruchomic ten kontener.

  1. Najczestsze problemy

Kontener nie startuje:

docker logs sapo-dashboard

Port 5003 jest zajety:

docker run -d --name sapo-dashboard-2 `
  --env-file .env `
  -p 8080:5003 `
  sapo-dashboard

W tym poleceniu:

    --name sapo-dashboard-2  uzywa innej nazwy, aby nie kolidowac z istniejacym
                                                     kontenerem sapo-dashboard.
    -p 8080:5003             wystawia port 8080 na Windowsie i kieruje go do
                                                     portu 5003 w kontenerze. Nie zmienia portu Gunicorna.

Wtedy aplikacja jest pod adresem http://localhost:8080.

Blad polaczenia z MySQL:

docker exec sapo-dashboard printenv MYSQL_HOST

W pliku .env, uzywanym przez docker –env-file, nie otaczaj wartosci
apostrofami. Przyklad:

MYSQL_HOST=db_host
MYSQL_USER=db_user
MYSQL_PASSWORD=haslo
MYSQL_DB=db_table

Docker Desktop musi dzialac, aby kontener mogl zostac uruchomiony.