Práca s Docker Images¶
Push a pull Docker images do/z TUKE Harbor Repository.
-
Push
Nahrávanie images do repository.
-
Pull
Sťahovanie images z repository.
-
Tagging
Správne označovanie verzií.
-
CI/CD
Automatizácia v pipeline.
Základný workflow¶
| Krok | Príkaz | Popis |
|---|---|---|
| 1 | docker build |
Vytvorenie image |
| 2 | docker tag |
Označenie pre repository |
| 3 | docker login |
Prihlásenie |
| 4 | docker push |
Nahratie do repository |
| 5 | docker pull |
Stiahnutie z repository |
Vytvorenie Docker Image¶
Z Dockerfile¶
Z bežiaceho kontajnera¶
Tag a Push¶
Označ image¶
Formát
repository.cloud.tuke.sk/<projekt>/<image-name>:<tag>
| Parameter | Popis | Príklad |
|---|---|---|
| projekt | Názov projektu v Harbor | moj-projekt |
| image-name | Názov Docker image | moja-aplikacia |
| tag | Verzia alebo označenie | v1.0, latest, dev |
Prihlás sa¶
Push image¶
Úspešné nahratie
Pull a spustenie¶
Stiahni image¶
Spusti kontajner¶
Pokročilé použitie¶
Multi-platform images¶
Build pre viacero architektúr (amd64, arm64):
# Vytvorenie buildx buildera
docker buildx create --name multiarch --use
# Build a push pre viacero platforiem
docker buildx build --platform linux/amd64,linux/arm64 \
-t repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0 \
--push .
Viacero tagov¶
# Tag image s viacerými verziami
docker tag moja-aplikacia:v1.0 repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0
docker tag moja-aplikacia:v1.0 repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:latest
# Push obe verzie
docker push repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0
docker push repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:latest
Multi-stage build (optimalizácia veľkosti)¶
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine:latest
COPY --from=builder /app/app /app
CMD ["/app"]
Docker Compose¶
docker-compose.yml¶
version: '3.8'
services:
app:
image: repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0
ports:
- "8080:80"
restart: unless-stopped
Spustenie¶
Kubernetes¶
Vytvor docker-registry secret¶
kubectl create secret docker-registry tuke-registry \
--docker-server=repository.cloud.tuke.sk \
--docker-username=ab123cd \
--docker-password=vase-heslo \
--docker-email=ab123cd@tuke.sk
Deployment YAML¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: moja-aplikacia
spec:
replicas: 3
selector:
matchLabels:
app: moja-aplikacia
template:
metadata:
labels:
app: moja-aplikacia
spec:
imagePullSecrets:
- name: tuke-registry
containers:
- name: app
image: repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0
ports:
- containerPort: 80
CI/CD Integrácia¶
GitLab CI/CD¶
# .gitlab-ci.yml
variables:
IMAGE_NAME: repository.cloud.tuke.sk/$CI_PROJECT_PATH:$CI_COMMIT_SHORT_SHA
build:
stage: build
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u $HARBOR_USER -p $HARBOR_PASSWORD repository.cloud.tuke.sk
script:
- docker build -t $IMAGE_NAME .
- docker push $IMAGE_NAME
GitHub Actions¶
# .github/workflows/docker.yml
name: Build and Push Docker Image
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Login to TUKE Harbor
uses: docker/login-action@v2
with:
registry: repository.cloud.tuke.sk
username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.HARBOR_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v4
with:
push: true
tags: repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:${{ github.sha }}
Harbor Web UI¶
Zobrazenie images¶
- Prihlás sa do Harbor web UI
- Prejdi do projektu
- Klikni na Repositories
- Vyber repository a zobraz všetky tagy
Vymazanie image¶
- V repository zozname vyber tag
- Klikni na Delete
- Potvrď vymazanie
Upozornenie
Vymazané images sa nedajú obnoviť!
Prehľad príkazov¶
# Prihlásenie
docker login repository.cloud.tuke.sk
# Tag image
docker tag <local-image> repository.cloud.tuke.sk/<projekt>/<image>:<tag>
# Push image
docker push repository.cloud.tuke.sk/<projekt>/<image>:<tag>
# Pull image
docker pull repository.cloud.tuke.sk/<projekt>/<image>:<tag>
# Zoznam lokálnych images
docker images | grep repository.cloud.tuke.sk
# Odhlásenie
docker logout repository.cloud.tuke.sk
Best Practices¶
Verziovanie
Namiesto latest používaj konkrétne verzie: v1.0.0, 2024.1, git commit SHA.
Multi-stage builds
Používaj multi-stage builds na minimalizáciu veľkosti image.
Automatizácia
Integruj build a push do CI/CD pipeline.
Dokumentácia
Pridaj README do images pomocou LABEL v Dockerfile.
Bezpečnosť
Nikdy neukladaj citlivé údaje (heslá, API keys) priamo do Docker images!