← Atpakaļ uz Emuārs

Emuārs

Docker Compose apgūšana ražošanai gatavai tīmekļa mitināšanai

Uzziniet, kā izmantot Docker Compose, lai izvietotu un pārvaldītu stabilas, izolētas un reproducējamas tīmekļa lietojumprogrammas ražošanas vidē. Šī rokasgrāmata aptver būtiskas paraugprakses, sākot no attēlu optimizācijas līdz drošam tīklošanai un uzraudzībai.

Kopsavilkums

Uzticama tīmekļa lietojumprogrammu izvietošana ražošanā bieži ietver vairāku savstarpēji savienotu pakalpojumu pārvaldību. Docker Compose piedāvā jaudīgu risinājumu, ļaujot definēt un palaist sarežģītas lietojumprogrammas, izmantojot vienkāršu YAML failu. Šis raksts palīdzēs jums izmantot Docker Compose ražošanai gatavai mitināšanai, koncentrējoties uz paraugpraksēm izolācijai, reproducējamībai un efektivitātei. Mēs aplūkosim Dockerfile optimizēšanu, konteineru drošību, veselības pārbaužu ieviešanu un piemērotas mitināšanas vides izvēli. Apgūstot šīs tehnikas, jūs varēsiet pārvarēt izplatītās izvietošanas problēmas un nodrošināt, ka jūsu tīmekļa lietojumprogrammas darbojas nevainojami un droši.

No "Mans dators darbojas" līdz ražošanai gatavai: Jūsu Docker Compose izvietošanas plāns

Pastāvīgā "mans dators darbojas" problēma rada vilšanos izvietošanas ciklos un nestabilās ražošanas vidēs. Docker ar savu konteinerizācijas tehnoloģiju piedāvā pārliecinošu risinājumu, iepakojot lietojumprogrammas un to atkarības izolētos, portatīvos vienībās. Tomēr mūsdienu tīmekļa lietojumprogrammām reti sastopams viens komponents; tās bieži ietver datubāzes, kešatmiņas, API un priekšgala pakalpojumus, kas darbojas kopā. Šeit Docker Compose izceļas, nodrošinot vienkāršotu veidu, kā definēt, orķestrēt un pārvaldīt vairāku konteineru Docker lietojumprogrammas.

Šī rokasgrāmata palīdzēs jums veikt būtiskos soļus un paraugprakses, lai izmantotu Docker Compose ražošanai gatavu tīmekļa lietojumprogrammu izvietošanai, nodrošinot konsekvenci, izolāciju un efektivitāti. Mēs pārsniegsim pamata iestatījumus, lai risinātu stabilas ražošanas izvietošanas nianses.

Docker Compose jauda ražošanai

Docker konteineri koplieto resursdatora operētājsistēmas kodolu, bet darbojas izolētās lietotāju telpās. Šī izolācija novērš konfliktus starp lietojumprogrammām un to atkarībām, nodrošinot, ka jūsu lietojumprogramma darbojas vienādi izstrādes, testēšanas un ražošanas vidēs. Docker Compose to vēl vairāk uzlabo, ļaujot definēt visu jūsu lietojumprogrammas steku — visus tā pakalpojumus, tīklus un datu krātuves — vienā docker-compose.yml failā.

Šī deklaratīvā pieeja piedāvā vairākas galvenās priekšrocības ražošanas mitināšanai:

  • Reproducējamība: Nodrošina, ka jūsu lietojumprogrammas steku var konsekventi atjaunot jebkurā mašīnā ar instalētu Docker.
  • Vienkāršota pārvaldība: Orķestrē vairākus konteinerus ar vienu komandu (docker-compose up, docker-compose down).
  • Izolācija: Katrs pakalpojums darbojas savā konteinerī, samazinot traucējumus.
  • Efektivitāte: Konteineri ir vieglāki nekā tradicionālās virtuālās mašīnas, nodrošinot labāku resursu izmantošanu.

1. darbība: Efektīvu Dockerfile izveide

Veiksmīgas Docker izvietošanas pamats ir labi optimizēti Dockerfile. Ražošanai tas nozīmē attēla izmēra un izveides laika samazināšanu, vienlaikus palielinot drošību un uzturēšanu.

  • Izmantojiet oficiālos bāzes attēlus: Sāciet ar oficiāliem, minimāliem bāzes attēliem (piemēram, alpine Nginx, Node.js, Python variantiem). Tie parasti ir labi uzturēti un mazāki.
  • Daudzpakāpju izveide: Tas ir ļoti svarīgi ražošanai. Izmantojiet izveides posmu, lai kompilētu vai izveidotu savu lietojumprogrammu, pēc tam kopējiet tikai nepieciešamos artefaktus uz tīru, minimālu izpildlaika attēlu. Tas ievērojami samazina galīgo attēla izmēru un noņem izveides rīkus, kas nav nepieciešami ražošanā.
    # Dockerfile piemērs ar daudzpakāpju izveidi
    FROM node:18-alpine AS builder
    WORKDIR /app
    COPY package*.json ./ 
    RUN npm install
    COPY . .
    RUN npm run build
    
    FROM nginx:stable-alpine
    COPY --from=builder /app/build /usr/share/nginx/html
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    
  • Minimizējiet slāņus: Katra Dockerfile instrukcija izveido slāni. Apvienojiet saistītās komandas, izmantojot &&, lai samazinātu slāņu skaitu.
  • Tīrīšana: Noņemiet nevajadzīgus failus, pakotņu pārvaldnieka kešatmiņas (piemēram, npm cache clean --force, apt-get clean) un pagaidu failus pēc tam, kad tie vairs nav nepieciešami.
  • Lietotājs, kas nav root: Lai uzlabotu drošību, palaidiet savas lietojumprogrammas procesus kā lietotājs, kas nav root, konteinerī. Izmantojiet USER instrukciju.

2. darbība: Jūsu docker-compose.yml struktūra ražošanai

Jūsu docker-compose.yml fails ir jūsu vairāku konteineru lietojumprogrammas plāns. Ražošanai tam jābūt stabilam un labi konfigurētam.

  • Skaidri definējiet pakalpojumus: Katram atsevišķam komponentam (tīmekļa serveris, lietojumprogrammas backend, datubāze, kešatmiņa) jābūt atsevišķam pakalpojumam.
    version: '3.8'
    services:
      web:
        build: .
        ports:
          - "80:80"
        volumes:
          - ./nginx.conf:/etc/nginx/conf.d/default.conf
        depends_on:
          - api
        networks:
          - app-network
    
      api:
        build: ./api
        expose:
          - "5000"
        environment:
          DATABASE_URL: postgresql://user:password@db:5432/mydatabase
        networks:
          - app-network
    
      db:
        image: postgres:14-alpine
        volumes:
          - db_data:/var/lib/postgresql/data/
        environment:
          POSTGRES_DB: mydatabase
          POSTGRES_USER: user
          POSTGRES_PASSWORD: password
        networks:
          - app-network
    
    volumes:
      db_data:
    
    networks:
      app-network:
    
  • Izmantojiet specifiskas attēlu birkas: Izvairieties izmantot latest birku attēliem. Piestipriniet pie specifiskām versijām (piemēram, nginx:1.23.3-alpine, postgres:14.5-alpine), lai nodrošinātu paredzamus izvietojumus un novērstu negaidītas pārtraukuma izmaiņas.
  • depends_on pret veselības pārbaudēm: Lai gan depends_on nodrošina, ka viens pakalpojums tiek palaists pēc cita, tas negarantē, ka atkarīgais pakalpojums ir gatavs pieņemt savienojumus. Ieviesiet veselības pārbaudes kritiskajiem pakalpojumiem (piemēram, datubāzēm), lai nodrošinātu, ka tie ir pilnībā funkcionējoši, pirms citi pakalpojumi mēģina izveidot savienojumu.
  • Vides mainīgie: Izmantojiet vides mainīgos (environment atslēga) savu pakalpojumu konfigurēšanai. Tas saglabā sensitīvu informāciju ārpus jūsu Dockerfile un padara konfigurāciju dinamisku. Ražošanai apsveriet .env failu izmantošanu vai sarežģītākus noslēpumu pārvaldības risinājumus.
  • Tīklošana: Definējiet pielāgotus tīklus (networks atslēga) saviem pakalpojumiem. Tas nodrošina labāku izolāciju un ļauj pakalpojumiem sazināties, izmantojot to pakalpojumu nosaukumus (piemēram, API var sasniegt datubāzi pie db:5432). Izmantojiet expose iekšējiem portiem un ports tikai tiem portiem, kuriem jābūt pieejamiem no resursdatora vai ārpasaules.
  • Datu krātuves pastāvībai: Izmantojiet nosauktas datu krātuves (volumes atslēga) pastāvīgiem datiem, piemēram, datubāzēm vai lietotāju augšupielādēm. Tas nodrošina, ka dati netiek zaudēti, kad konteineri tiek apturēti vai atjaunoti.

3. darbība: Veselības pārbaužu ieviešana

Ražošanas vidēs ir nepieciešama noturība. Docker veselības pārbaudes funkcija ļauj definēt, kā Docker jānosaka, vai konteiners ir vesels. Tas ir ļoti svarīgi orķestrēšanai un slodzes līdzsvarošanai.

Pievienojiet healthcheck sadaļu savai pakalpojuma definīcijai docker-compose.yml failā:

services:
  # ... citi pakalpojumi
  db:
    image: postgres:14-alpine
    # ... citas konfigurācijas
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d mydatabase"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 10s

Tas norāda Docker katras 30 sekundes palaist komandu pg_isready. Ja tā neizdodas 5 reizes, konteiners tiek atzīmēts kā nevesels. start_period dod konteinerim laiku, lai sāktu darboties, pirms veselības pārbaudes sākas.

4. darbība: Jūsu Docker izvietošanas drošināšana

Drošība ir vissvarīgākā ražošanā. Vairākas prakses var uzlabot jūsu Dockerizēto tīmekļa lietojumprogrammu drošību:

  • Minimizējiet uzbrukuma virsmu: Izmantojiet minimālus bāzes attēlus un instalējiet tikai nepieciešamās pakotnes. Noņemiet nevajadzīgus portus un pakalpojumus.
  • Regulāri atjauniniet attēlus: Saglabājiet savus bāzes attēlus un lietojumprogrammu atkarības atjauninātas, lai novērstu zināmas ievainojamības. Automatizējiet šo procesu, kur tas ir iespējams.
  • Skenējiet attēlus pēc ievainojamības: Izmantojiet rīkus, piemēram, Trivy vai Docker Scout, lai pirms izvietošanas skenētu savus attēlus pēc zināmiem drošības trūkumiem.
  • Ierobežojiet konteineru privilēģijas: Palaidiet konteinerus ar minimālajām nepieciešamajām privilēģijām. Izvairieties palaist konteinerus kā root, kad vien tas ir iespējams. Ja nepieciešams, izmantojiet tikai lasāmus saknes failu sistēmas.
  • Drošiniet sensitīvus datus: Nekad neierakstiet noslēpumus (API atslēgas, datubāzes paroles) savos Dockerfile vai docker-compose.yml failos. Izmantojiet vides mainīgos, Docker noslēpumus vai īpašu noslēpumu pārvaldības rīku.
  • Tīkla segmentācija: Izmantojiet Docker tīklus, lai izolētu pakalpojumus. Atveriet tikai tos portus, kas ir absolūti nepieciešami.

5. darbība: Piemērotas mitināšanas vides izvēle

Lai gan Docker Compose vienkāršo izvietošanu, zemāk esošā infrastruktūra ir svarīga. Ražošanai apsveriet:

  • VPS ar KVM virtualizāciju: Pakalpojumu sniedzēji, kas piedāvā KVM (Kernel-based Virtual Machine) virtualizāciju, parasti nodrošina labāku resursu izolāciju un veiktspēju Docker konteineru darbināšanai, salīdzinot ar OpenVZ vai LXC. Tas nodrošina, ka jūsu konteinerus neietekmē pārmērīgi trokšņaini kaimiņi.
  • Pārvaldīta Docker mitināšana: Daži pakalpojumu sniedzēji specializējas pārvaldītā Docker mitināšanā, piedāvājot iepriekš konfigurētas vides un atbalstu konteineru orķestrēšanai. Tas var samazināt darbības izmaksas.
  • Mākoņu pakalpojumu sniedzēji (AWS, GCP, Azure): Tie piedāvā stabilus konteineru pakalpojumus (piemēram, EKS, GKE, AKS) un elastīgas VPS opcijas (EC2, Compute Engine, Virtual Machines), kuras var konfigurēt Docker darbināšanai. Tie nodrošina mērogojamību, uzticamību un uzlabotas tīklošanas funkcijas.
  • Resursu piešķiršana: Nodrošiniet, ka jūsu mitināšanas plāns nodrošina pietiekami daudz CPU, RAM un diska I/O jūsu lietojumprogrammas steka vajadzībām. Cieši uzraugiet resursu izmantošanu.

6. darbība: Ražošanas apsvērumi: Uzraudzība, reģistrēšana un mērogošana

Izvietošana ir tikai sākums. Ražošanai gatavai lietojumprogrammai nepieciešama stabila uzraudzība, reģistrēšana un mērogošanas stratēģija.

  • Reģistrēšana: Konfigurējiet savus konteinerus, lai tie reģistrētu uz stdout un stderr. Izmantojiet centralizētu reģistrēšanas risinājumu (piemēram, ELK steku, Grafana Loki, mākoņu pakalpojumu sniedzēju reģistrēšanas pakalpojumus), lai apkopotu žurnālus no visiem jūsu konteineriem, lai atvieglotu analīzi un atkļūdošanu.
    services:
      # ...
      api:
        # ...
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
    
  • Uzraudzība: Ieviesiet lietojumprogrammu veiktspējas uzraudzības (APM) rīkus un infrastruktūras uzraudzību. Izsekojiet galvenos rādītājus, piemēram, CPU/atmiņas izmantošanu, tīkla trafiku, pieprasījumu latentumu un kļūdu līmeni. Tādi rīki kā Prometheus un Grafana ir populāras izvēles.
  • Mērogošana: Bezstatiskām lietojumprogrammām mērogošana bieži ietver jūsu pakalpojuma vairāku instanču darbināšanu. Docker Compose pats par sevi galvenokārt ir paredzēts viena resursdatora izvietošanai. Lai veiktu mērogošanu un orķestrēšanu vairākos resursdatoros, galu galā jums būs jāmeklē tādi rīki kā Docker Swarm vai Kubernetes. Tomēr jūs joprojām varat izmantot Docker Compose, lai pārvaldītu atsevišķus mezglus lielākā klasterī.
  • CI/CD integrācija: Automatizējiet savu izveides, testēšanas un izvietošanas cauruļvadu, izmantojot CI/CD rīkus (piemēram, Jenkins, GitLab CI, GitHub Actions). Tas nodrošina, ka koda izmaiņas tiek integrētas un izvietotas efektīvi un uzticami.

Secinājums

Docker Compose ir neaizstājams rīks vairāku konteineru tīmekļa lietojumprogrammu pārvaldībai, pārvēršot izvietošanas procesu no satraukuma avota par racionalizētu, reproducējamu darba plūsmu. Ievērojot paraugprakses Dockerfile optimizēšanā, docker-compose.yml struktūrā, drošībā, veselības pārbaudēs un piemērotas mitināšanas izvēlē, jūs varat pārliecinoši izveidot un izvietot ražošanai gatavas lietojumprogrammas. Atcerieties, ka ražošana ir nepārtraukts process; nepārtraukta uzraudzība, regulāri atjauninājumi un skaidra mērogošanas stratēģija ir galvenie, lai uzturētu stabilu un uzticamu tīmekļa klātbūtni. Pieņemiet šos principus, un jūs būsiet ceļā uz "mans dators darbojas" dilemmas novēršanu uz visiem laikiem.

Sources (5)