# 01 — Aktualizacja systemu i instalacja Docker CE > **Cel rozdziału:** zaktualizować świeży Ubuntu 26.04 LTS i zainstalować Docker Engine z oficjalnego repozytorium Docker Inc. (nie `docker.io` z Ubuntu). **Szacowany czas:** 10–20 minut (zależy od liczby pakietów do aktualizacji) **Wymagania:** rozdział [00 — Wymagania i konwencje](00-prerequisites.md) --- ## Spis treści 1. [Weryfikacja punktu startowego](#1-weryfikacja-punktu-startowego) 2. [Aktualizacja systemu](#2-aktualizacja-systemu) 3. [Instalacja Docker CE](#3-instalacja-docker-ce) 4. [Konfiguracja post-install](#4-konfiguracja-post-install) 5. [Weryfikacja](#5-weryfikacja) 6. [Troubleshooting](#6-troubleshooting) 7. [Czego nie robimy w tym kroku](#7-czego-nie-robimy-w-tym-kroku) 8. [Następny krok](#8-następny-krok) --- ## 1. Weryfikacja punktu startowego Przed jakimikolwiek zmianami potwierdź stan systemu. Te komendy **nic nie modyfikują**. ```bash # wersja Ubuntu — oczekiwane: 26.04, codename: resolute lsb_release -a # kernel uname -r # wolne miejsce na dysku głównym (minimum ~5 GB na upgrade + Docker) df -h / # uprawnienia sudo groups | grep -q sudo && echo "sudo: OK" || echo "sudo: BRAK — wymagane!" # Docker nie powinien być jeszcze zainstalowany docker --version 2>/dev/null || echo "Docker: not installed (expected)" # GPU widoczne w PCI (sterownik jeszcze niepotrzebny) lspci | grep -i "nvidia" ``` **Oczekiwany wynik:** - Ubuntu 26.04 LTS (`resolute`) - Użytkownik w grupie `sudo` - Docker niezainstalowany - NVIDIA RTX 3090 Ti widoczna w `lspci` **Uwaga:** `nvidia-smi` nie działa na tym etapie — to normalne. Sterowniki instalujemy w rozdziale 02. --- ## 2. Aktualizacja systemu ### 2.1 Aktualizacja list pakietów i upgrade ```bash sudo apt update sudo apt upgrade -y ``` Pierwszy pełny upgrade na świeżej instalacji może pobrać setki pakietów — poczekaj na zakończenie. ### 2.2 Instalacja pakietów bazowych Te pakiety są potrzebne do dodania repozytorium Docker i dalszej konfiguracji serwera: ```bash sudo apt install -y \ ca-certificates \ curl \ gnupg \ lsb-release \ apt-transport-https \ software-properties-common ``` | Pakiet | Po co | |--------|-------| | `ca-certificates` | Weryfikacja certyfikatów HTTPS (repo Docker) | | `curl` | Pobieranie kluczy GPG i plików z internetu | | `gnupg` | Weryfikacja podpisów pakietów | | `lsb-release` | Odczyt wersji Ubuntu (codename `resolute`) | | `apt-transport-https` | Obsługa repozytoriów HTTPS przez apt | | `software-properties-common` | Narzędzia do zarządzania repozytoriami | ### 2.3 Sprawdzenie, czy wymagany jest restart ```bash # jeśli plik istnieje — kernel lub libc wymagają restartu test -f /var/run/reboot-required && cat /var/run/reboot-required || echo "Restart not required" ``` Jeśli restart jest wymagany: ```bash sudo reboot ``` Po restarcie zaloguj się ponownie i wróć do tego rozdziału od sekcji 3. **Uwaga:** Na tym systemie `unattended-upgrades` jest domyślnie aktywny — to dobrze dla bezpieczeństwa. Pierwszy pełny upgrade wykonujemy jednak ręcznie, żeby mieć kontrolę nad procesem. --- ## 3. Instalacja Docker CE Instalujemy Docker z **oficjalnego repozytorium Docker Inc.**, nie z pakietu `docker.io` dostępnego w repozytoriach Ubuntu. Oficjalne repo daje: - najnowsze wersje Engine, - plugin `docker compose` (v2), - plugin `docker-buildx`, - bezpośrednią ścieżkę aktualizacji (`apt upgrade`). Dokumentacja: [Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/) ### 3.1 Usunięcie konfliktowych pakietów Jeśli wcześniej nic nie instalowałeś, ten krok nic nie usunie — ale warto go wykonać dla czystości: ```bash for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove -y $pkg 2>/dev/null done ``` ### 3.2 Dodanie oficjalnego klucza GPG Docker ```bash sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc ``` ### 3.3 Dodanie repozytorium Docker (format DEB822) ```bash sudo tee /etc/apt/sources.list.d/docker.sources </dev/null | grep -E 'Server Version|Storage Driver|Cgroup Driver|Logging Driver' ``` Oczekiwane m.in.: - `Storage Driver: overlay2` - `Logging Driver: json-file` ### 5.5 Test bez sudo (po re-logowaniu / newgrp) ```bash docker ps ``` Oczekiwane: pusta lista kontenerów, **bez** błędu uprawnień. ### Checklist - [ ] `docker --version` działa - [ ] `docker compose version` działa - [ ] `docker run --rm hello-world` zakończone sukcesem - [ ] `systemctl status docker` → active (running) - [ ] `docker ps` działa bez `sudo` - [ ] `/etc/docker/daemon.json` istnieje z rotacją logów --- ## 6. Troubleshooting ### 6.1 Permission denied na `/var/run/docker.sock` ``` permission denied while trying to connect to the Docker daemon socket ``` **Przyczyna:** Użytkownik nie jest w grupie `docker` lub nie zalogował się ponownie po `usermod`. **Rozwiązanie:** ```bash # sprawdź grupy groups # jeśli brak "docker": sudo usermod -aG docker $USER newgrp docker # lub wyloguj się i zaloguj ponownie ``` ### 6.2 `docker-ce has no installation candidate` **Przyczyna:** Błędny codename w `/etc/apt/sources.list.d/docker.sources`. **Rozwiązanie:** ```bash grep Suites /etc/apt/sources.list.d/docker.sources # musi być: Suites: resolute # jeśli inny — usuń i dodaj repo ponownie (sekcja 3.3) sudo rm /etc/apt/sources.list.d/docker.sources # ... powtórz kroki 3.2 i 3.3 ``` ### 6.3 Konflikt z `docker.io` **Objaw:** apt instaluje `docker.io` zamiast `docker-ce`, lub oba się gryzą. **Rozwiązanie:** ```bash sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 sudo apt autoremove -y # powtórz sekcję 3.4 ``` ### 6.4 Błąd pobierania klucza GPG ``` curl: (6) Could not resolve host: download.docker.com ``` **Przyczyna:** Brak internetu lub problem DNS. **Rozwiązanie:** ```bash # test połączenia ping -c 3 download.docker.com ping -c 3 8.8.8.8 # sprawdź DNS cat /etc/resolv.conf ``` ### 6.5 Daemon nie startuje po `daemon.json` **Objaw:** `systemctl status docker` → failed. **Przyczyna:** Błędny JSON w `/etc/docker/daemon.json`. **Rozwiązanie:** ```bash # walidacja JSON python3 -m json.tool /etc/docker/daemon.json # jeśli błąd składni — przywróć minimalną konfigurację: sudo tee /etc/docker/daemon.json <<'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" } } EOF sudo systemctl restart docker ``` ### 6.6 `hello-world` — image pull failed ```bash # test dostępu do Docker Hub docker pull hello-world # sprawdź logi daemona sudo journalctl -u docker --no-pager -n 50 ``` --- ## 7. Czego nie robimy w tym kroku Świadomie **pomijamy** — pojawią się w kolejnych rozdziałach: | Element | Rozdział | |---------|----------| | Sterowniki NVIDIA (`nvidia-driver-*`) | 02 | | `nvidia-smi`, CUDA toolkit | 02 | | NVIDIA Container Toolkit (`nvidia-ctk`) | 03 | | GPU w kontenerach (`--gpus all`) | 03 | | vLLM | 04 | | ComfyUI | 05 | | UFW / firewall / fail2ban | 06 | | Katalog `/data` na modele | później | Docker zainstalowany w tym rozdziale **nie ma dostępu do GPU** — to zamierzone. Najpierw fundament, potem warstwy. --- ## 8. Następny krok Po przejściu checklisty z sekcji 5: 1. Zgłoś w rozmowie z Cursorem, że krok 01 jest gotowy (lub opisz problemy z Troubleshooting). 2. Przejdź do rozdziału [**02 — Sterowniki NVIDIA**](02-nvidia-driver.md). --- ## Podsumowanie wykonanych zmian Po ukończeniu tego rozdziału na serwerze powinno być: - Zaktualizowany system Ubuntu 26.04 LTS - Zainstalowany Docker CE z oficjalnego repo - Pluginy `docker compose` i `docker-buildx` - Użytkownik w grupie `docker` - Skonfigurowana rotacja logów w `/etc/docker/daemon.json` - Działający test `hello-world`