Docker kontra Kubernetes: kluczowe różnice, jak ze sobą współpracują i czego potrzebujesz

  1. Strona główna
  2. Blog
  3. DevOps

DevOps

Docker kontra Kubernetes: Kluczowe różnice, jak współdziałają i czego potrzebujesz

Docker i Kubernetes nie są tak naprawdę rywalami. Jeden pakuje i uruchamia kontenery, a drugi zarządza nimi na wielu komputerach. Dowiedz się, gdzie pasuje każdy z nich, zobacz, jak jedna aplikacja działa z obydwoma i zdecyduj, czego potrzebuje Twój projekt.

9 min czytania
Docker vs Kubernetes: kluczowe różnice, jak ze sobą współpracują i czego potrzebujesz

Najważniejsze

  • Docker tworzy obrazy i uruchamia kontenery, zazwyczaj na jednej maszynie.
  • Kubernetes planuje kontenery w klastrze maszyn i zarządza nimi.
  • Zwykle używa się ich razem: Docker buduje obraz, a Kubernetes uruchamia go w środowisku produkcyjnym.
  • Bardziej sprawiedliwe porównanie to Kubernetes vs Docker Swarm lub Compose, a wiele małych projektów w ogóle nie potrzebuje Kubernetes.

Wyszukiwanie Docker vs Kubernetes sugeruje, że musisz wybrać jedno, ale to kadrowanie powoduje wiele zamieszania. To trochę tak, jakby porównywać kontener transportowy z portem, który organizuje ich tysiące. Działają na różnych poziomach i często są używane obok siebie.

Ten przewodnik wyjaśnia, co robi każdy z nich, pokazuje tę samą małą aplikację w obu i kończy się praktycznym sposobem podjęcia decyzji. Polecenia i pliki tutaj są standardowymi przykładami, których nie wykonaliśmy w tym artykule, więc porównaj je z wersjami, które instalujesz.

Krótka odpowiedź

Docker to platforma służąca do pakowania aplikacji i jej zależności w obraz, a następnie uruchamiania tego obrazu jako kontenera. Odpowiada na pytanie „jak sprawić, by ta aplikacja działała wszędzie tak samo?”

Kubernetes, często pisany jako K8, to orkiestrator kontenerów. Decyduje, gdzie kontenery działają na wielu maszynach, uruchamia je ponownie w przypadku awarii i skaluje je w zależności od zapotrzebowania. Odpowiada na pytanie: „Jak zapewnić niezawodne działanie setek kontenerów?”

Docker kontra Kubernetes obok siebie

Aspekt Doker Kubernetes
Główna praca Kompiluj i uruchamiaj kontenery Organizuj kontenery
Zakres Zwykle jeden gospodarz Klaster wielu węzłów
Tworzy obrazy? Tak Nie
Jednostka podstawowa Pojemnik Pod (jeden lub więcej pojemników)
Konfiguracja Dockerfile, compose.yaml Manifesty YAML
Nieudany kontener Opcjonalne zasady ponownego uruchamiania na tym hoście Zastępowane automatycznie, nawet w innym węźle
Skalowanie Ręcznie, na jednym hoście z funkcją Compose Deklaratywny, z opcjami autoskalowania
Sieć Sieci mostkowe na hoście Usługi obejmujące cały klaster i DNS
Krzywa uczenia się Delikatny Strome
Najlepsze dla Rozwój i małe wdrożenia Duże systemy produkcyjne

Co robi Docker

Przed kontenerami „działa na moim komputerze” było codziennym problemem, ponieważ każdy serwer miał różne wersje wszystkiego. Docker łączy Twój kod, środowisko wykonawcze i biblioteki w jeden obraz. Działająca kopia tego obrazu to kontener, który współdzieli jądro hosta, dzięki czemu uruchamia się szybciej i zużywa mniej pamięci niż pełna maszyna wirtualna.

Przepływ pracy składa się z trzech etapów:

  1. Kompilacja: a Dockerfile opisuje, jak utworzyć obraz.
  2. Wysyłka: wypchnij obraz do rejestru, takiego jak Docker Hub.
  3. Uruchom: uruchom kontenery z tego obrazu na dowolnej kompatybilnej maszynie.

Aby zdobyć praktyczną wiedzę, zacznij od naszego samouczka dotyczącego Dockera dla początkujących, a następnie przeczytaj nasze sprawdzone metody dotyczące pliku Dockerfile.

Co robi Kubernetes

Docker na jednym serwerze działa dobrze, dopóki ten serwer nie ulegnie awarii, ruch go nie przewyższy lub nie będziesz musiał koordynować dziesiątek usług. Kubernetes zajmuje się następującymi zadaniami operacyjnymi:

  • Planowanie: umieszczanie kontenerów na maszynach z wystarczającą ilością wolnego miejsca.
  • Samonaprawa: wymiana uszkodzonych kontenerów i przenoszenie pracy z uszkodzonych węzłów.
  • Skalowanie: dodawanie lub usuwanie kopii ręcznie lub na podstawie wskaźników.
  • Wykrywanie usług: nadawanie zmieniającej się grupie kontenerów jednej stabilnej nazwy.
  • Aktualizacje ciągłe: stopniowe wydawanie nowych wersji z prostym wycofywaniem.
  • Konfiguracja: zarządzanie ustawieniami i sekretami niezależnie od obrazów.

Podstawową ideą jest stan pożądany. Deklarujesz, że powinny istnieć trzy kopie, a kontrolerzy na bieżąco porównują to z rzeczywistością i korygują wszelkie różnice. Nasz samouczek Kubernetes dla początkujących omawia tę kwestię w klastrze lokalnym.

Jak Docker i Kubernetes współpracują ze sobą

Typowa droga od laptopa programisty do produkcji wygląda następująco:

  1. Programista zapisuje Dockerfile i testuje kontener lokalnie.
  2. Potok CI/CD buduje obraz i uruchamia testy.
  3. Potok wypycha wersjonowany obraz do rejestru.
  4. Manifest Kubernetes został zaktualizowany w celu użycia tej wersji obrazu.
  5. Kubernetes pobiera obraz i wdraża go w klastrze.

Zatem praca Dockera jest w dużej mierze zakończona przed uruchomieniem Kubernetesa. Obraz jest punktem przekazania pomiędzy nimi.

Jedna aplikacja, w obie strony

Oto mały serwis internetowy. Obraz jest zbudowany w ten sam sposób, niezależnie od tego, które narzędzie go uruchamia:

# Dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Uruchamianie go za pomocą Dockera

docker build -t shop-api:1.0 .
docker run -d --name shop -p 8080:8000 --restart unless-stopped shop-api:1.0

Dwie komendy i działa. Jest to proste i odpowiednie dla wielu małych projektów. Ale na jednej maszynie znajduje się jedna kopia, a jeśli maszyna umrze, usługa idzie z nią.

Uruchamianie go za pomocą Kubernetesa

# shop.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: shop
spec:
  replicas: 3
  selector:
    matchLabels:
      app: shop
  template:
    metadata:
      labels:
        app: shop
    spec:
      containers:
        - name: api
          image: registry.example.com/shop-api:1.0
          ports:
            - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: shop
spec:
  selector:
    app: shop
  ports:
    - port: 80
      targetPort: 8000
kubectl apply -f shop.yaml
kubectl get pods -l app=shop

Jest o wiele więcej do napisania i potrzebujesz klastra, aby to uruchomić. W zamian otrzymujesz trzy kopie, stabilny adres wewnętrzny i automatyczną wymianę. Ten kompromis to cała decyzja w miniaturze: większa złożoność w zamian za większą odporność.

Co się stanie, jeśli kontener ulegnie awarii?

Wydarzenie Docker na jednym hoście Kubernetes
Aplikacja ulega awarii Uruchomiono ponownie, jeśli ustawiono zasady ponownego uruchamiania Uruchomiony ponownie automatycznie
Aplikacja zawiesza się, ale działa Pozostaje zawieszony, chyba że dodasz obsługę Sonda żywotności może go ponownie uruchomić
Cały serwer umiera Usługa nie działa, dopóki ktoś nie podejmie działań Pody są odtwarzane w zdrowych węzłach
Ruch potroi się Skalujesz ręcznie, na jednym hoście Autoskaler może dodawać kopie
Złe wydanie Ręcznie ponownie wdrażasz stary obraz cofnięcie wdrożenia kubectl

Zamieszanie z dockershimem

Być może czytałeś, że „Kubernetes porzucił Dockera”. Jest to prawdą w wąskim znaczeniu i niepotrzebnie przestraszyło wiele osób. Kubernetes obsługuje kontenery za pośrednictwem standardu zwanego interfejsem wykonawczym kontenera. Docker Engine nie zaimplementował tego bezpośrednio, więc Kubernetes dołączył adapter o nazwie dockershim. Adapter ten został usunięty w wersji 1.24.

Klastry obecnie zazwyczaj korzystają ze środowisk wykonawczych, takich jak Containerd lub CRI-O. Obrazy tworzone za pomocą Dockera nadal działają, ponieważ są zgodne ze standardem obrazu Open Container Initiative (OCI). Możesz więc dalej budować za pomocą platformy Docker, a klaster uruchomi wynik w innym środowisku wykonawczym.

Docker Compose, Swarm i Kubernetes

Bardziej znaczące porównanie dotyczy narzędzi koordynujących kontenery:

Narzędzie Zakres Wysiłek konfiguracyjny Dobre dla
Tworzenie Dockera Jeden gospodarz Bardzo niski Rozwój lokalny, małe aplikacje
Rój Dokerów Mały klaster Niski Proste konfiguracje wielu serwerów
Kubernetes Duże skupiska Wysoka Złożone systemy o dużej skali

Docker Compose uruchamia kilka powiązanych kontenerów z jednego pliku i doskonale sprawdza się w przypadku aplikacji internetowej i bazy danych na laptopie. Swarm jest wbudowany w Dockera i jest znacznie łatwiejszy do nauczenia niż Kubernetes, ale ma znacznie mniejszy ekosystem. Kubernetes ma największą społeczność i narzędzia, co w dużej mierze wyjaśnia, dlaczego stał się rozwiązaniem domyślnym w przypadku dużych wdrożeń.

Wskazówka: porównaj rzeczywiste koszty. Kubernetes oznacza ciągłe aktualizacje, pracę nad bezpieczeństwem i monitorowanie, a także naukę. Usługa zarządzana, taka jak Amazon EKS, Google GKE czy Azure AKS, zmniejsza tę pracę, ale jej nie usuwa.

Które potrzebujesz?

Sam Docker zwykle wystarcza, gdy:

  • Tworzysz lokalnie lub uruchamiasz małą aplikację na jednym serwerze.
  • Masz mały zespół i brak dedykowanego personelu operacyjnego.
  • Dopuszczalne są sporadyczne krótkie przestoje.

Kubernetes zaczyna mieć sens, gdy:

  • Prowadzisz wiele usług, które różne zespoły wdrażają samodzielnie.
  • Potrzebujesz wysokiej dostępności na kilku maszynach lub strefach.
  • Ruch jest na tyle zróżnicowany, że automatyczne skalowanie pozwala zaoszczędzić realne pieniądze.
  • Masz umiejętności lub budżet, aby go obsługiwać.

Istnieje również złoty środek. Zarządzane platformy kontenerowe, takie jak AWS Fargate, Google Cloud Run lub PaaS, uruchamiają obraz Dockera bez konieczności utrzymywania klastra. Dla wielu rozwijających się firm jest to właściwy następny krok, zamiast od razu przejść do Kubernetes.

Jeśli chcesz nauczyć się obu ze względów zawodowych, kolejność jest jasna: najpierw Docker, potem Kubernetes. Nie można wygodnie debugować Poda bez uprzedniego zrozumienia obrazów, portów i dzienników kontenerów.

Typowe błędy

  • Zbyt wczesne przyjęcie Kubernetesa. Kopiowanie architektury gigantycznej firmy może pogrzebać mały zespół w pracy operacyjnej.
  • Używanie tagu latest w środowisku produkcyjnym. Nie można stwierdzić, co działa, ani niezawodnie wycofać. Użyj określonych tagów wersji.
  • Przechowywanie danych w kontenerach. Kontenery są jednorazowe, dlatego używaj woluminów lub zarządzanej bazy danych.
  • Pomijanie kontroli stanu. Bez sond gotowości i żywotności Kubernetes nie może podejmować dobrych decyzji dotyczących Twojej aplikacji.
  • Zapominanie o limitach zasobów. Jeden zachłanny kontener może zagłuszyć wszystko inne w węźle.

Podsumowanie

Docker pakuje Twoje oprogramowanie, a Kubernetes obsługuje je na dużą skalę. Zamiast pytać, co jest lepsze, zapytaj, jaki masz dzisiaj problem. Jeśli jest to „trudno zainstalować moją aplikację”, użyj Dockera. Jeśli jest to „moich 40 usług potrzebnych do przetrwania awarii serwera”, spójrz na Kubernetes. Zacznij od najprostszego narzędzia, które rozwiąże Twój rzeczywisty problem i przejdź dalej, gdy zobaczysz potrzebę.

Najczęstsze pytania

Czy Kubernetes może zastąpić Dockera?

Nie do końca, bo wykonują inną pracę. Kubernetes nie tworzy obrazów, więc zespoły nadal używają do tego Dockera lub podobnego narzędzia, a Kubernetes sprawdza wyniki.

Czy mogę używać Kubernetes bez Dockera?

Tak. Klastry często obsługują kontenery z kontenerami lub CRI-O. Obrazy zbudowane za pomocą Dockera nadal działają, ponieważ są zgodne ze standardem OCI.

Czy powinienem najpierw nauczyć się Dockera czy Kubernetesa?

Najpierw naucz się Dockera. Kubernetes zakłada, że ​​znasz już obrazy, kontenery, porty i dzienniki, więc te podstawy znacznie ułatwią naukę.

Czy Docker Swarm nie żyje?

Nie, jest nadal dostępny i pasuje do prostych klastrów. Jednak jego ekosystem i adopcja są znacznie mniejsze niż Kubernetes, więc sprawdź, czy spełnia Twoje długoterminowe potrzeby.

Czy małe firmy potrzebują Kubernetesa?

Zwykle nie na początku. Docker Compose lub zarządzana platforma kontenerowa często dobrze im służy, dopóki skala lub struktura zespołu nie sprawi, że Kubernetes będzie wart swojej ceny.

Ucz się dalej

Pracuj z Stack Quora

Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?

Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.

Czytaj dalej

Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój

Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.

Sztuczna inteligencja

Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć

Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…

Przeczytaj artykuł →
DevOps

Wyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo

Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429

Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …

Przeczytaj artykuł →
Automatyzacja testów

Wyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią

Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…

Przeczytaj artykuł →
Testowanie oprogramowania

Wyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%

Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…

Przeczytaj artykuł →
Bazy danych i SQL

DELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich

DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami

Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…

Przeczytaj artykuł →
Tworzenie oprogramowania

Interfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora

Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…

Przeczytaj artykuł →
Tworzenie oprogramowania

Python *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami

Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…

Przeczytaj artykuł →
Tworzenie oprogramowania

Funkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać

Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…

Przeczytaj artykuł →
Sztuczna inteligencja

Kim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić

Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…

Przeczytaj artykuł →
DevOps

Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…

Przeczytaj artykuł →
DevOps

Woluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób

Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…

Przeczytaj artykuł →
Automatyzacja testów

TDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich

TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…

Przeczytaj artykuł →
Testowanie oprogramowania

Testowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady

Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać

Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…

Przeczytaj artykuł →
Bazy danych i SQL

Instrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy

SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…

Przeczytaj artykuł →
Tworzenie oprogramowania

Co to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania

Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami

Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom

Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …

Przeczytaj artykuł →
Sztuczna inteligencja

Czym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa

Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…

Przeczytaj artykuł →
DevOps

Wdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru

Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…

Przeczytaj artykuł →
Automatyzacja testów

Niestabilne testy: co je powoduje i jak je naprawić na dobre

Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…

Przeczytaj artykuł →
Testowanie oprogramowania

Load Testing vs Stress Testing: Differences, Metrics and k6 Examples

Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…

Przeczytaj artykuł →
Testowanie oprogramowania

Przypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich

Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…

Przeczytaj artykuł →
Bazy danych i SQL

Optymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją

Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…

Przeczytaj artykuł →
Bazy danych i SQL

SQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność

SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…

Przeczytaj artykuł →
Tworzenie oprogramowania

Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…

Przeczytaj artykuł →
Tworzenie oprogramowania

Klasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami

Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu

Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…

Przeczytaj artykuł →
DevOps

Polecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami

Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…

Przeczytaj artykuł →
Automatyzacja testów

Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór

Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…

Przeczytaj artykuł →
Testowanie oprogramowania

Partycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach

Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…

Przeczytaj artykuł →
Testowanie oprogramowania

Ważność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady

Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…

Przeczytaj artykuł →
Bazy danych i SQL

Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji

Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…

Przeczytaj artykuł →
Tworzenie oprogramowania

Ściągawka dotycząca poleceń Git: polecenia, których faktycznie używasz, z przykładami

Ściągawka poleceń Git pogrupowana według zadań: konfiguracja, przemieszczanie, gałęzie, piloty, skrytka, historia i cofanie błędów, z danymi wyjścio…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie obietnic JavaScript: następnie catch, Promise.all i typowe błędy

Obietnice JavaScript wyjaśnione za pomocą uruchomionego przez nas kodu: stany, łańcuchy then i catch, obsługa błędów, Promise.all, allSettled, race …

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek słownika języka Python: metody, przykłady i typowe wzorce

Samouczek słownika języka Python z uruchomionym przez nas kodem: tworzenie, odczytywanie i aktualizowanie słowników, metody kluczowych, łączenie, ro…

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest RAG? Generacja rozszerzona o wyszukiwanie wyjaśniona na przykładzie roboczym

Co to jest RAG? Generowanie wspomagane pobieraniem wyjaśnione krok po kroku: indeksowanie, fragmentowanie, osadzanie, pobieranie, mały działający pr…

Przeczytaj artykuł →
DevOps

Samouczek Terraform dla początkujących: Infrastruktura jako kod od pierwszego pliku do modułów

Samouczek Terraform dla początkujących: zacznij bez konta w chmurze, naucz się inicjowania, planowania i stosowania, a następnie zmiennych, wyników,…

Przeczytaj artykuł →
DevOps

Docker kontra Kubernetes: kluczowe różnice, jak ze sobą współpracują i czego potrzebujesz

Wyjaśniono Docker vs Kubernetes: co robi każdy z nich, ta sama aplikacja działa z obydwoma, porównanie Docker Compose i Swarm, zmiana podkładki dock…

Przeczytaj artykuł →
Automatyzacja testów

Samouczek Pytest dla początkujących: urządzenia, parametryzacja i prawdziwe przykłady

Samouczek pytest dla początkujących z testami, które przeprowadziliśmy na pytest 9.2: asercje, urządzenia, parametryzacja, conftest, znaczniki, tmp_…

Przeczytaj artykuł →
Testowanie oprogramowania

Cykl życia testowania oprogramowania (STLC): 6 faz, kryteria wejścia i wyjścia, przykład

Wyjaśniono cykl życia testowania oprogramowania: sześć faz STLC z kryteriami wejścia i wyjścia, elementy dostarczane, działający przykład funkcji lo…

Przeczytaj artykuł →
Tworzenie oprogramowania

Git merge vs rebase: różnice, przykłady i kiedy czego używać

Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.

Przeczytaj artykuł →
Tworzenie oprogramowania

Python list comprehension: składnia, przykłady i kiedy jej unikać

Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…

Przeczytaj artykuł →
Bazy danych i SQL

SQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)

Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…

Przeczytaj artykuł →