Preskoči na sadržaj

Docker i operacije

Kod spreman za produkciju još nije stabilno vođen proizvod. Izvod iz fajlova ove veb-stranice pokazuje šta je između: jedna linija pokreće aplikaciju, ostale je drže u radu.

Radni list, red po red

radni-list.diff
Linije
+14−14
Odeljci
7

Izvod iz Dockerfile i docker-compose.yml ove veb-stranice, skraćen. Prva linija je primer komande.

Prikaz
  1. Primer komande

    docker run -p 3000:3000 anwendung

    00

    Radi

    Ovako aplikacija radi na laptopu, u testu i pri prihvatanju.

    To nije dovoljno Posetioci dolaze u svako doba, a ova jedna linija za to nije dovoljna.

  2. docker-compose.yml

    services:  app:    restart: unless-stopped

    01

    Samostalni restart

    Ako servis padne ili se server ponovo pokrene, aplikacija se sama vraća. Samo namerno zaustavljanje je drži zaustavljenom.

    Bez linije Posle prvog pada servis ostaje ugašen dok ga neko ne primeti.

  3. Dockerfile

    EXPOSE 3000HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 CMD wget -qO- http://127.0.0.1:3000/api/health || exit 1CMD ["node", "server.js"]

    02

    Samoprovera na 30 sekundi

    Na svakih 30 sekundi aplikacija proverava sama sebe da li odgovara. Tri neuspela pokušaja zaredom i smatra se pokvarenom.

    Bez linije Docker vidi samo da proces radi, ne i da li još odgovara.

  4. docker-compose.yml

      nginx:    image: nginx:1.29-alpine    depends_on:      app:        condition: service_healthy

    03

    Veb-server čeka

    Veb-server prima posetioce tek kada se aplikacija javi kao ispravna.

    Bez linije Dok se aplikacija još pokreće, posetioci vide stranice sa greškom.

  5. docker-compose.yml

      app:    expose:      - "3000"  nginx:    ports:      - "80:80"      - "443:443"

    04

    Jedan ulaz spolja

    Spolja vodi jedan put do aplikacije: veb-server, na portu 80 i, šifrovano, na 443. Sama aplikacija sluša samo u internoj mreži.

    Na serveru ove veb-stranice, koji deli više projekata, tu ulogu preuzima već postojeći veb-server. Kontejner tamo sluša samo lokalno.

    Bez linije Svaki dodatno otvoren port je još jedan put koji neko mora da obezbedi.

  6. docker-compose.yml

      app:    env_file: .env.production

    05

    Tajne van koda

    Lozinke i ključevi nalaze se u posebnom fajlu koji nije ni u repozitorijumu koda ni u image-u.

    Bez linije Lozinke bi morale da stoje u kodu ili u image-u.

  7. Dockerfile

    COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile

    06

    Svaka izrada liči na prethodnu

    Instalacija uzima tačno one verzije paketa koje piše u zaključanom fajlu. Ako se fajl ne slaže sa projektom, izrada staje.

    Bez linije Nova izrada može da povuče druge verzije paketa, pa nešto odjednom radi drugačije.

  8. Dockerfile

    WORKDIR /appRUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjsUSER nextjs

    07

    Bez administratora u kontejneru

    Aplikacija radi pod sopstvenim korisnikom bez administratorskih prava.

    Bez linije Radila bi kao administrator, pa bi greška u njoj u kontejneru imala sva prava.

Rezultat

Sistem nastavlja da radi i kad niko ne gleda

Šta ne stoji ni u jednom fajlu

3 obećanja ne mogu da se upišu kao linija. Nalaze se u dokumentaciji koja ide uz primopredaju.

Povratak
Loše ažuriranje se vraća unazad za nekoliko minuta
Dokumentovano
Bekapi, sertifikati i pristupi su podešeni i dokumentovani
Primopredaja
Sve se završava primopredajom sa svim ključevima

VodičZašto rad sistema pripada proizvodu:Kada se isplati klijentski portal?

Tipične primene

  1. 01Prelazak sa Vercel-a ili deljenog hostinga na sopstveni server
  2. 02Rad korisničkog portala sa više servisa
  3. 03Staging okruženje za prihvatanje pre objave
  4. 04Oporavak posle prekida ili pogrešne konfiguracije
  5. 05Predaja internom timu ili drugom pružaocu

Odgovarajuće ponude

U ovim ponudama koristi se Docker.

Sledeći korak

Prvo projekat, pa stack.

Koja tehnologija odgovara, odlučuje se tek na kraju. Prvi razgovor od 15 minuta pokazuje gde aplikacija danas radi i šta joj treba da nastavi da radi.