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
- Linije
- +14−14
- Odeljci
- 7
Izvod iz Dockerfile i docker-compose.yml ove veb-stranice, skraćen. Prva linija je primer komande.
Primer komande
docker run -p 3000:3000 anwendung00
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.
docker-compose.yml
services: app: restart: unless-stopped01
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.
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.
docker-compose.yml
nginx: image: nginx:1.29-alpine depends_on: app: condition: service_healthy03
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.
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.
docker-compose.yml
app: env_file: .env.production05
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.
Dockerfile
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile06
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.
Dockerfile
WORKDIR /appRUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjsUSER nextjs07
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
- 01Prelazak sa Vercel-a ili deljenog hostinga na sopstveni server
- 02Rad korisničkog portala sa više servisa
- 03Staging okruženje za prihvatanje pre objave
- 04Oporavak posle prekida ili pogrešne konfiguracije
- 05Predaja internom timu ili drugom pružaocu
Odgovarajuće ponude
U ovim ponudama koristi se Docker.
- 04
Full-stack razvoj
Jedna funkcija, jedan sistem, jedna odgovornost.
- 05
Portal i softver po meri
Pretvori uslugu u digitalno iskustvo.
- 06
Partner za rast
Digitalni partner koji ostaje i posle objave.
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.
Ili direktno: info@coderconda.com