- 1 1. Úvod
- 2 2. Základní struktura Dockerfile
- 3 3. Praktické: Vytváření Dockerfile založeného na Ubuntu
- 4 4. Sestavování a ověřování Docker obrazů
- 5 5. Pokročilé: Sestavení prostředí Python
- 6 6. Běžné problémy a řešení potíží
- 7 7. Shrnutí
- 8 8. FAQ (Často kladené otázky)
1. Úvod
Co jsou Docker a Dockerfiles?
V posledních letech Docker rychle získal popularitu jako efektivní způsob, jak zjednodušit vývojové prostředí a nasazení aplikací. Docker balí aplikace a jejich závislosti do jediné jednotky nazývané „kontejner“, což umožňuje jejich konzistentní spuštění v různých prostředích.
K vytvoření těchto Dockerových kontejnerů je potřeba plán nazvaný Dockerfile. Dockerfile je textový soubor, který definuje základní obraz operačního systému, instalovaný software, proměnné prostředí a další konfigurační detaily. Vývojáři ho mohou použít k automatickému vytvoření přizpůsobených prostředí.
Proč používat Ubuntu jako základní obraz?
Při vytváření Dockerfile je prvním krokem výběr základního obrazu operačního systému. Mezi mnoha dostupnými možnostmi je Ubuntu jedním z nejoblíbenějších. Ubuntu je distribuce Linuxu založená na Debianu, známá svou snadností použití a flexibilním nastavením prostředí podporovaným obrovským ekosystémem balíčků.
Dockerfile založené na Ubuntu nabízejí několik výhod:
- Rozsáhlá oficiální a komunitní dokumentace, což vede k nízké křivce učení
- Snadná instalace balíčků a nástrojů pomocí APT
- Oficiálně poskytované lehké a minimální obrazy (jako
ubuntu:20.04aubuntu:24.04)
Účel tohoto článku a cílová skupina
Tento článek se zaměřuje na klíčové slovo „Dockerfile Ubuntu“ a vysvětluje, jak vytvářet Dockerfile založené na Ubuntu způsobem, který je snadno srozumitelný pro začátečníky.
Pokryje vše od základní struktury Dockerfile až po krok za krokem pokyny pro vytvoření prostředí Ubuntu, příklady nastavení prostředí aplikací jako Python a běžné chyby s jejich řešeními.
Tento článek je doporučen pro:
- Ty, kteří chtějí poprvé vytvořit prostředí pomocí Dockerfile
- Vývojáře, kteří chtějí vytvořit reprodukovatelná vývojová prostředí na Ubuntu
- Kdokoli, kdo chce prohloubit své porozumění, včetně technik řešení problémů
2. Základní struktura Dockerfile
Co je Dockerfile a jakou hraje roli?
Dockerfile je jako recept na vytváření Dockerových obrazů. Definuje, který základní operační systém použít, jaký software instalovat a jak konfigurovat prostředí.
Spuštěním příkazu docker build na základě tohoto souboru můžete snadno vytvořit vysoce reprodukovatelná vývojová a runtime prostředí.
Výhody používání Dockerfile:
- Automatizované nastavení prostředí (není potřeba manuální opakování)
- Eliminuje nesrovnalosti prostředí v týmovém vývoji
- Snadná integrace do CI/CD pipeline
Běžně používané instrukce Dockerfile
Dockerfile se skládá z více instrukcí (direktiv). Níže jsou uvedeny některé z nejběžněji používaných. Jejich vhodnou kombinací můžete vytvořit Dockerfile založené na Ubuntu.
| Instruction | Description |
|---|---|
FROM | Specifies the base Docker image (e.g., FROM ubuntu:24.04) |
RUN | Executes shell commands, typically for installing packages |
COPY | Copies local files into the image |
ADD | Similar to COPY, but also supports URLs and archive extraction |
WORKDIR | Sets the working directory |
ENV | Defines environment variables |
CMD | Defines the default command executed at container startup (can be overridden) |
ENTRYPOINT | Defines a command that is always executed at container startup |
Minimální příklad Dockerfile založeného na Ubuntu
Níže je velmi základní příklad Dockerfile používajícího Ubuntu jako základní obraz.
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
curl \
vim
CMD ["/bin/bash"]
Tento Dockerfile používá Ubuntu 24.04 jako základní obraz, instaluje nástroje curl a vim a spouští Bash shell při startu kontejneru.
Výběr vhodného tagu Ubuntu
Obrazy Dockeru Ubuntu jsou publikovány v oficiálním repozitáři Docker Hub. Zatímco specifikace ubuntu:latest použije nejnovější verzi, doporučuje se explicitně připnout verzi.
Například:
ubuntu:22.04(LTS: Long-Term Support, zaměřené na stabilitu)ubuntu:24.04(Nejnovější LTS, zaměřené na novější funkce)
Vyberte verzi na základě toho, zda je vaším přednostem stabilita nebo nové funkce.
3. Praktické: Vytváření Dockerfile založeného na Ubuntu
Instalace požadovaných balíčků v prostředí Ubuntu
.
Když vytváříte prostředí Ubuntu pomocí Dockerfile, často je nutné nainstalovat další balíčky. Například následující nástroje se běžně používají při nastavování vývojového prostředí:
curl: pro stahování souborů a testování APIvim: lehký textový editorgit: systém pro správu verzíbuild-essential: základní nástroje pro kompilaci programů v C/C++
Pro instalaci těchto balíčků v Dockerfile použijte instrukci RUN.
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
curl \
vim \
git \
build-essential
Spuštěním apt-get update nejprve zajistíte, že jsou před instalací načteny nejnovější seznamy balíčků.
Konfigurace neinteraktivní instalace
V Ubuntu může apt-get install někdy vyžadovat vstup od uživatele. Během sestavování Dockeru však interaktivní operace nejsou možné. Aby se tomu předešlo, doporučuje se nastavit proměnnou prostředí a povolit neinteraktivní režim.
ENV DEBIAN_FRONTEND=noninteractive
Tím se potlačí výzvy, jako je výběr locale nebo časové zóny, a instalace proběhne hladce.
Snížení velikosti obrazu odstraněním zbytečné cache
Při používání APT mohou v obrazu zůstat stažené dočasné soubory (cache), což zvyšuje jeho konečnou velikost. Velikost obrazu můžete snížit odstraněním cache, jak je ukázáno níže:
RUN apt-get update && apt-get install -y \
curl \
vim \
&& rm -rf /var/lib/apt/lists/*
Kombinování více příkazů do jedné instrukce RUN také pomáhá předcházet zbytečnému nárůstu vrstev obrazu.
Nejlepší postupy pro psaní Dockerfile
V reálných vývojových prostředích se široce doporučují následující nejlepší postupy pro Dockerfile:
- Kombinujte instrukce
RUN, kdykoli je to možné, aby se snížil počet vrstev - Explicitně definujte verze a nastavení pomocí
ENV - Používejte komentáře k jasnému popisu účelu každého kroku
- Vyhněte se zanechávání zbytečných souborů pomocí
rma--no-install-recommends
Příklad:
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
Tento přístup vede k lehčímu a lépe udržovatelnému Dockerfile.
4. Sestavování a ověřování Docker obrazů
Sestavení Docker obrazu z Dockerfile
Jakmile je váš Dockerfile připraven, dalším krokem je sestavit Docker obraz. To se provádí pomocí příkazu docker build. Spusťte následující příkaz v adresáři, který obsahuje váš Dockerfile:
docker build -t my-ubuntu-image .
- Volba
-tpřiřadí obrazu jméno (tag). V tomto příkladu je obraz pojmenovánmy-ubuntu-image. - Tečka (
.) odkazuje na aktuální adresář obsahující Dockerfile.
Docker přečte instrukce v Dockerfile postupně a sestaví obraz podle nich.
Kontrola vytvořeného Docker obrazu
Po úspěšném sestavení obrazu jej můžete ověřit pomocí následujícího příkazu:
docker images
Tento příkaz zobrazí seznam Docker obrazů uložených lokálně, včetně následujících informací:
- REPOSITORY (název obrazu)
- TAG
- IMAGE ID (jedinečný identifikátor)
- CREATED (datum vytvoření)
- SIZE
Příklad:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ubuntu-image latest abcd1234abcd 5 minutes ago 189MB
Tím se potvrdí, že obraz byl správně zaregistrován.
Spuštění Docker kontejneru pro ověření
Aby bylo možné ověřit, že vytvořený obraz funguje podle očekávání, spusťte Docker kontejner pomocí následujícího příkazu:
docker run -it my-ubuntu-image
- Volba
-itspustí interaktivní terminálovou relaci. - Pokud vše proběhne úspěšně, objeví se Bash prompt, což naznačuje, že jste uvnitř Ubuntu kontejneru.
V kontejneru můžete ověřit nainstalované nástroje pomocí příkazů, jako jsou:
curl --version
vim --version
Pokud tyto příkazy fungují správně, váš Dockerfile je správně nakonfigurován.
Vyčištění nepoužívaných obrázků a kontejnerů
Opakované sestavování a experimenty mohou na vašem systému zanechat nepoužívané Docker obrázky a kontejnery. Doporučuje se je pravidelně čistit pomocí následujících příkazů:
- Odstraňte zastavené kontejnery:
docker container prune
- Odstraňte nepoužívané obrázky:
docker image prune
- Odstraňte všechna nepoužívaná data (používejte opatrně):
docker system prune
Tyto operace pomáhají ušetřit místo na disku a předcházet potenciálním problémům.
5. Pokročilé: Sestavení prostředí Python
Povolení Pythonu v Dockerfile založeném na Ubuntu
Při sestavování prostředí Ubuntu pomocí Dockerfile přidání prostředí pro spouštění Pythonu umožňuje širokou škálu použití, včetně vývoje, testování a strojového učení. Ačkoli Python může být na Ubuntu nainstalován ve výchozím nastavení, je běžnou praxí ho explicitně nakonfigurovat pro lepší správu verzí a balíčků.
Instalace Pythonu pomocí APT
Nejjednodušší přístup je instalace Pythonu pomocí balíčků APT. Níže je příklad:
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
Tato metoda poskytuje stabilní systémovou verzi Pythonu (např. Python 3.10 nebo 3.12, v závislosti na vydání Ubuntu). Můžete také nainstalovat další balíčky Pythonu pomocí příkazu pip.
Správa verzí Pythonu pomocí pyenv
Pokud potřebujete specifickou verzi Pythonu nebo chcete přepínat mezi více verzemi, je vysoce doporučeno použít pyenv.
Následující příklad ukazuje, jak nainstalovat Python 3.11.6 pomocí pyenv v Dockerfile:
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
git \
curl \
make \
build-essential \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
wget \
llvm \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
tk-dev \
libffi-dev \
liblzma-dev \
&& rm -rf /var/lib/apt/lists/*
# Install pyenv
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv
ENV PYENV_ROOT="$HOME/.pyenv"
ENV PATH="$PYENV_ROOT/bin:$PATH"
RUN echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
# Install a specific Python version
RUN pyenv install 3.11.6 && pyenv global 3.11.6
Toto nastavení poskytuje flexibilní a dobře ovládané prostředí Pythonu.
Správa balíčků pomocí requirements.txt
Většina reálných projektů vyžaduje více knihoven Pythonu. Tyto závislosti se běžně spravují pomocí souboru requirements.txt.
Nejprve vytvořte soubor requirements.txt v kořeni vašeho projektu:
flask==2.3.2
requests>=2.25.1
pandas
Poté ho odkazujte ve svém Dockerfile následovně:
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
Tím se umožní instalace všech požadovaných knihoven najednou a výrazně se zlepší reprodukovatelnost prostředí.
Nejlepší postupy
- Při používání Pythonu pomáhá vytvoření virtuálního prostředí pomocí
virtualenvnebovenvpředcházet konfliktům závislostí. - Používání možností potlačení mezipaměti, jako je
--no-cache-dir, snižuje velikost Docker obrázku. - Spuštění
pip install --upgrade pippřed instalací balíčků může pomoci vyhnout se chybám instalace.
6. Běžné problémy a řešení potíží
Chyby oprávnění
Příklad:
Permission denied
Tato chyba nastává, když kopírované soubory nemají oprávnění k vykonávání nebo když je špatně nakonfigurované vlastnictví souborů a uživatelé pro vykonávání.
Řešení:
- Udělte souboru oprávnění k vykonávání:
RUN chmod +x script.sh
- Změňte vlastnictví souboru, pokud je to nutné:
RUN chown root:root /path/to/file
Balíček nenalezen nebo selhání instalace
Příklad:
E: Unable to locate package xxx
.Tato chyba se obvykle vyskytuje, když nebylo spuštěno apt-get update nebo je název balíčku nesprávný.
Řešení:
- Vždy spusťte
apt-get updatepřed instalací balíčků:RUN apt-get update && apt-get install -y curl
- Ověřte názvy balíčků a zkontrolujte překlepy
Chyby související se sítí
Příklad:
Temporary failure resolving 'deb.debian.org'
Tato chyba naznačuje problém s DNS rozlišením během procesu sestavení.
Řešení:
- Restartování Docker daemonu může problém vyřešit:
sudo systemctl restart docker
- Zkontrolujte nastavení DNS v Dockeru přidáním DNS serverů do
/etc/docker/daemon.json:{ "dns": ["8.8.8.8", "8.8.4.4"] }
Sestavení s neaktuální mezipamětí
Docker používá mezipaměť založenou na vrstvách pro zrychlení sestavení. V důsledku toho se změny v Dockerfile nemusí okamžitě projevit.
Řešení:
- Přestavěte bez mezipaměti:
docker build --no-cache -t my-image .
Kontejner okamžitě ukončí nebo se nespustí startovací příkaz
Příčiny:
- Příkaz uvedený v
CMDneboENTRYPOINTobsahuje chybu - Použití
CMD ["/bin/bash"]bez interaktivního režimu způsobí okamžité ukončení
Řešení:
- Spusťte kontejner v ladicím režimu:
docker run -it my-image /bin/bash
- Pochopte rozdíly mezi
CMDaENTRYPOINTa používejte je vhodně
Když se setkáte s těmito problémy a vyřešíte je, vaše dovednosti v návrhu Dockerfile se postupně zlepší. Když nastanou chyby, pečlivě si přečtěte chybové zprávy a identifikujte, který instrukce a vrstva problém způsobily.
7. Shrnutí
Klíčové poznatky pro tvorbu Dockerfile na bázi Ubuntu
Tento článek poskytl krok‑za‑krokem vysvětlení, jak vytvářet Ubuntu prostředí pomocí Dockerfile, pokrývající jak základní, tak pokročilá témata. Projděme si hlavní body:
- Porozumění základům Dockerfile je první krok – instrukce jako
FROM,RUN,CMDaENVumožňují automatizovanou tvorbu prostředí. - Ubuntu je stabilní a flexibilní základní obraz – jeho rozsáhlý ekosystém balíčků, velká uživatelská základna a LTS verze jej činí ideálním pro vývojová prostředí.
- Praktické řízení balíčků umožňuje instalaci potřebných nástrojů a knihoven – správné používání
apt-get, čištění mezipaměti a neinteraktivní instalace jsou nezbytné. - Vytváření praktických prostředí, například pro Python, je plně podporováno Dockerfile – nástroje jako
pyenv,piparequirements.txtzajišťují reprodukovatelné nastavení. - Schopnosti řešení problémů přímo ovlivňují stabilitu provozu – pochopení oprávnění, síťování a chování mezipaměti sestavení výrazně zvyšuje produktivitu.
Další kroky v učení Dockerfile
Jakmile budete s Dockerfile pohodlní, můžete své dovednosti rozšířit mimo vývoj až k testování a produkčním nasazením. Zvažte následující témata:
- Správa více kontejnerových nastavení pomocí Docker Compose
- Integrace s CI/CD nástroji jako GitHub Actions a GitLab CI
- Práce s platformami pro orchestraci kontejnerů, jako je Kubernetes
Oficiální dokumentace a referenční odkazy
- Oficiální dokumentace Dockeru (japonština)
- Docker Hub – Oficiální Ubuntu obrazy
- Repozitář pyenv na GitHubu
8. FAQ (Často kladené otázky)
Q1. Kterou verzi Ubuntu mám zvolit v Dockerfile?
A1. Ve většině případů se doporučuje zvolit LTS (Long Term Support) verzi pro stabilitu a dlouhodobou údržbu. Verze jako ubuntu:22.04 a ubuntu:20.04 jsou široce používány a podporovány po dobu pěti let.
Pokud potřebujete nejnovější balíčky nebo verze jazyků, můžete zvolit novější vydání, například ubuntu:24.04, ale důkladné testování je pak nezbytné.
Q2. Proč apt-get install hlásí „package not found“?
A2. Nejběžnějším důvodem je selhání spuštění apt-get update předem. Bez aktualizace seznamu balíčků nemůže APT najít požadované balíčky.
Správný příklad:
RUN apt-get update && apt-get install -y curl
Také se ujistěte, že názvy balíčků jsou správné a nejsou zastaralé (například použijte python3 místo python).
Q3. Jak nastavím proměnné prostředí v Dockerfile?
A3. Použijte instrukci ENV k definování proměnných prostředí, které jsou dostupné během doby sestavení i běhu kontejneru.
Příklad:
ENV DEBIAN_FRONTEND=noninteractive
To se běžně používá k potlačení interaktivních výzev během instalací APT. Proměnné prostředí jsou také užitečné pro konfiguraci aplikací a API klíče.
Q4. Jaký je rozdíl mezi CMD a ENTRYPOINT?
A4. Oba specifikují příkazy spuštěné při spuštění kontejneru, ale jejich chování se liší.
| Item | CMD | ENTRYPOINT |
|---|---|---|
| Overridable | Can be overridden by docker run | Generally not overridden (treated as fixed command) |
| Use Case | Define a default command | Define a command that must always run |
Příklad:
CMD ["python3", "app.py"]
# vs
ENTRYPOINT ["python3"]
CMD ["app.py"]
V tomto posledním případě můžete předat argumenty pomocí docker run my-image another_script.py.
Q5. Proč se moje změny v Dockerfile neodrážejí?
A5. Docker používá mezipaměť sestavení, což může způsobit, že se nezměněné vrstvy znovu použijí i po úpravě Dockerfile.
Řešení:
docker build --no-cache -t my-image .
To vynutí úplné přesestavení a zajistí, že všechny změny budou aplikovány.


