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
- 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.
- 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.
- 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.
- 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
UWAGA
na publiczne fora ani do repozytorium.!!!
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.
- 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
- 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.
- 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
- 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.
- 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.
- 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.