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¶
graph LR
A[Build] --> B[Tag]
B --> C[Login]
C --> D[Push]
D --> E[Pull]
| 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áste sa¶
Push image¶
Úspešné nahratie
Pull a spustenie¶
Stiahnite image¶
Spustite 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¶
services:
app:
image: repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0
ports:
- "8080:80"
restart: unless-stopped
Spustenie¶
Kubernetes¶
Vytvorte 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
Integrácia s CI/CD¶
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:
- echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USER" --password-stdin 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áste sa do Harbor web UI
- Prejdite do projektu
- Kliknite na Repositories
- Vyberte repository a zobrazte všetky tagy
Vymazanie image¶
- V repository zozname vyberte tag
- Kliknite na Delete
- Potvrďte 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žívajte konkrétne verzie: v1.0.0, 2024.1, git commit SHA.
Multi-stage builds
Používajte multi-stage builds na minimalizáciu veľkosti image.
Automatizácia
Integrujte build a push do CI/CD pipeline.
Dokumentácia
Pridajte README do images pomocou LABEL v Dockerfile.
Bezpečnosť
Nikdy neukladaj citlivé údaje (heslá, API keys) priamo do Docker images!