Preskočiť na obsah

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

FROM python:3.11-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
docker build -t moja-aplikacia:v1.0 .

Z bežiaceho kontajnera

docker commit <container-id> moja-aplikacia:v1.0

Tag a Push

Označ image

docker tag moja-aplikacia:v1.0 repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0

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

docker login repository.cloud.tuke.sk

Push image

docker push repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0

Úspešné nahratie

The push refers to repository [repository.cloud.tuke.sk/moj-projekt/moja-aplikacia]
v1.0: digest: sha256:abc123... size: 1234

Pull a spustenie

Stiahni image

docker pull repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0

Spusti kontajner

docker run -d repository.cloud.tuke.sk/moj-projekt/moja-aplikacia:v1.0

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

docker login repository.cloud.tuke.sk
docker-compose pull
docker-compose up -d

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

  1. Prihlás sa do Harbor web UI
  2. Prejdi do projektu
  3. Klikni na Repositories
  4. Vyber repository a zobraz všetky tagy

Vymazanie image

  1. V repository zozname vyber tag
  2. Klikni na Delete
  3. 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!


Ďalšie kroky

  • Prihlásenie


    Prihlásenie do repository.

    Návod

  • FAQ


    Časté otázky.

    FAQ