Lab 03 – Docker image a Dockerfile
Lab 03 – Docker image a Dockerfile
Cíl: pochopit vrstvy tím, že uvidíte pracovat build cache. Tahák: Docker
# 1 – stažení a prozkoumání
sudo docker pull nginx:1.27
sudo docker images
sudo docker history nginx:1.27 # jeden řádek na vrstvu, s velikostmi
history je build recept čtený pozpátku. Většina vrstev má 0 B – jen metadata.
Ta velká je základní souborový systém.
# 2 – sdílení vrstev
sudo docker pull nginx:1.27-alpine
sudo docker images | grep nginx
Porovnejte velikosti. Alpine image jsou malé proto, že je malá základna, ne proto, že by nginx byl jiný.
Postavte si vlastní
# 3 – build kontext
mkdir -p ~/myweb && cd ~/myweb
echo '<h1>Hello from support01</h1>' > index.html
cat > Dockerfile <<'DOCKERFILE'
FROM nginx:1.27-alpine
LABEL maintainer="student@k8s.lab"
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
DOCKERFILE
Všechno v aktuálním adresáři se pošle démonu jako build kontext. Držte ho malý
– právě od toho je .dockerignore.
# 4 – build a spuštění
sudo docker build -t myweb:1.0 .
sudo docker images | grep myweb
sudo docker run -d --name myweb -p 8081:80 myweb:1.0
curl -s localhost:8081
Sledujte výstup buildu: každá instrukce je krok a každý krok vytvoří vrstvu.
# 5 – změňte jeden řádek, přebuildujte, sledujte cache
echo '<h1>Version 1.1</h1>' > index.html
sudo docker build -t myweb:1.1 . # "CACHED" u FROM/LABEL, přestavba od COPY
sudo docker history myweb:1.1 | head -5
Cache se zneplatní u první změněné instrukce a všechno pod ní se staví znovu.
Proto pravidlo: nejméně se měnící instrukce nahoru, COPY aplikace nakonec.
# 6 – tagy jsou jmenovky nad ID image
sudo docker tag myweb:1.1 myweb:latest
sudo docker images | grep myweb # stejné IMAGE ID, tři jména
Dva tagy nad jedním ID jsou důvod, proč je :latest nebezpečný – neříká nic
o tom, který build vlastně běží.
Úklid
# 7 –
sudo docker rm -f myweb
sudo docker rmi myweb:1.0 myweb:1.1 myweb:latest