Lietuvių

Atraskite Docker galią su šiuo išsamiu vadovu. Sužinokite apie konteinerizaciją, jos privalumus, pagrindines sąvokas ir praktinį pritaikymą pasauliniam programinės įrangos kūrimui.

Docker konteinerizacija: išsamus vadovas pasauliniams kūrėjams

Šiandieninėje sparčiai besikeičiančioje technologinėje aplinkoje efektyvus ir nuoseklus programų diegimas yra nepaprastai svarbus. Nesvarbu, ar esate tarptautinės korporacijos ar paskirstyto startuolio dalis, užtikrinti, kad jūsų programos veiktų sklandžiai įvairiose aplinkose, yra didelis iššūkis. Čia į pagalbą ateina Docker konteinerizacija, siūlanti standartizuotą būdą programuoti, platinti ir vykdyti programas. Šiame išsamiame vadove bus nagrinėjamos pagrindinės Docker sąvokos, jos privalumai pasaulinėms kūrimo komandoms ir praktiniai žingsniai, kaip pradėti.

Kas yra Docker ir kodėl jis iš esmės keičia programinės įrangos kūrimą?

Iš esmės Docker yra atvirojo kodo platforma, automatizuojanti programų diegimą, mastelio keitimą ir valdymą lengvuose, perkeliamuose vienetuose, vadinamuose konteineriais. Įsivaizduokite konteinerį kaip savarankišką paketą, kuriame yra viskas, ko reikia programai veikti: kodas, vykdymo laikas, sistemos įrankiai, sistemos bibliotekos ir nustatymai. Ši izoliacija užtikrina, kad programa veiks taip pat, nepriklausomai nuo pagrindinės infrastruktūros, išspręsdama seną problemą „tai veikia mano kompiuteryje“.

Tradiciškai programų diegimas apėmė sudėtingas konfigūracijas, priklausomybių valdymą ir galimus konfliktus tarp skirtingų programinės įrangos versijų. Tai ypač sudėtinga buvo pasaulinėms komandoms, kuriose kūrėjai galėjo naudoti skirtingas operacines sistemas arba turėti skirtingas kūrimo aplinkas. Docker elegantiškai apeina šias problemas atitraukdamas nuo pagrindinės infrastruktūros.

Pagrindiniai Docker privalumai pasaulinėms komandoms:

Paaiškintos pagrindinės Docker sąvokos

Norint efektyviai naudoti Docker, būtina suprasti jo pagrindinius komponentus.

1. Docker vaizdas

Docker vaizdas yra tik skaitymui skirtas šablonas, naudojamas Docker konteineriams kurti. Iš esmės tai yra programos ir jos aplinkos momentinė nuotrauka konkrečiu laiko momentu. Vaizdai kuriami sluoksniais, kai kiekviena instrukcija Dockerfile (pvz., paketo įdiegimas, failų kopijavimas) sukuria naują sluoksnį. Šis sluoksniuotas metodas leidžia efektyviai saugoti ir greičiau kurti, nes Docker gali pakartotinai naudoti nepakeistus sluoksnius iš ankstesnių kompiliacijų.

Vaizdai saugomi registruose, o populiariausias viešasis registras yra Docker Hub. Galite galvoti apie vaizdą kaip apie brėžinį, o apie konteinerį – kaip apie to brėžinio egzempliorių.

2. Dockerfile

Dockerfile yra paprastas tekstinis failas, kuriame yra instrukcijų rinkinys Docker vaizdui sukurti. Jame nurodomas bazinis vaizdas, kurį reikia naudoti, komandos, kurias reikia vykdyti, failai, kuriuos reikia kopijuoti, prievadai, kuriuos reikia atidaryti, ir kt. Docker nuskaito Dockerfile ir nuosekliai vykdo šias instrukcijas, kad sukurtų vaizdą.

Paprastas Dockerfile gali atrodyti taip:

# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Run app.py when the container launches
CMD ["python", "app.py"]

Šis Dockerfile apibrėžia vaizdą, kuris:

3. Docker konteineris

Docker konteineris yra vykdomas Docker vaizdo egzempliorius. Kai paleidžiate Docker vaizdą, jis sukuria konteinerį. Galite paleisti, sustabdyti, perkelti ir ištrinti konteinerius. Iš to paties vaizdo galima paleisti kelis konteinerius, kurių kiekvienas veikia izoliuotai.

Pagrindinės konteinerių charakteristikos yra:

4. Docker registras

Docker registras yra saugykla, skirta Docker vaizdams saugoti ir platinti. Docker Hub yra numatytasis viešasis registras, kuriame galite rasti didelę iš anksto sukurtų vaizdų kolekciją įvairioms programavimo kalboms, duomenų bazėms ir programoms. Taip pat galite nustatyti privačius registrus savo organizacijos nuosavybės vaizdams.

Kai vykdote komandą, pvz., docker run ubuntu, Docker pirmiausia patikrina, ar jūsų vietiniame kompiuteryje yra Ubuntu vaizdas. Jei jis nerastas, jis ištraukia vaizdą iš sukonfigūruoto registro (pagal numatytuosius nustatymus Docker Hub).

5. Docker Engine

Docker Engine yra pagrindinė kliento-serverio technologija, kuri kuria ir vykdo Docker konteinerius. Jį sudaro:

Darbo pradžia su Docker: praktinis vadovas

Atlikime keletą esminių Docker komandų ir dažną naudojimo atvejį.

Įdiegimas

Pirmas žingsnis yra Docker įdiegimas savo kompiuteryje. Apsilankykite oficialioje Docker svetainėje ([docker.com](https://www.docker.com/)) ir atsisiųskite tinkamą diegimo programą savo operacinei sistemai (Windows, macOS arba Linux). Vykdykite diegimo instrukcijas savo platformai.

Pagrindinės Docker komandos

Štai keletas pagrindinių komandų, kurias reguliariai naudosite:

Pavyzdys: paprasto žiniatinklio serverio paleidimas

Sukurkime paprastą Python žiniatinklio serverį naudodami Flask sistemą.

1. Projekto sąranka:

Sukurkite katalogą savo projektui. Šiame kataloge sukurkite du failus:

app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello from a Dockerized Flask App!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

requirements.txt:

Flask==2.0.0

2. Sukurkite Dockerfile:

Tame pačiame projekto kataloge sukurkite failą pavadinimu Dockerfile (be plėtinio) su šiuo turiniu:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 80

CMD ["python", "app.py"]

3. Sukurkite Docker vaizdą:

Atidarykite terminalą, eikite į projekto katalogą ir paleiskite:

docker build -t my-flask-app:latest .

Ši komanda nurodo Docker sukurti vaizdą naudojant Dockerfile dabartiniame kataloge ir pažymėti jį kaip my-flask-app:latest.

4. Paleiskite Docker konteinerį:

Dabar paleiskite konteinerį iš ką tik sukurtą vaizdą:

docker run -d -p 5000:80 my-flask-app:latest

Vėliavėlių paaiškinimas:

5. Patikrinkite programą:

Atidarykite žiniatinklio naršyklę ir eikite į http://localhost:5000. Turėtumėte pamatyti pranešimą: „Hello from a Dockerized Flask App!“. (Sveiki iš Dockerizuotos Flask programos!).

Norėdami pamatyti veikiantį konteinerį, naudokite docker ps. Norėdami jį sustabdyti, naudokite docker stop <container_id> (pakeiskite <container_id> ID, kurį rodo docker ps).

Išplėstinės Docker sąvokos pasauliniam diegimui

Kai jūsų projektai auga ir jūsų komandos tampa labiau paskirstytos, norėsite ištirti daugiau pažangių Docker funkcijų.

Docker Compose

Programoms, kurias sudaro kelios paslaugos (pvz., žiniatinklio priekinė sąsaja, galinė API ir duomenų bazė), atskirų konteinerių valdymas gali tapti sudėtingas. Docker Compose yra įrankis, skirtas apibrėžti ir vykdyti kelių konteinerių Docker programas. Jūs apibrėžiate savo programos paslaugas, tinklus ir tomus YAML faile (docker-compose.yml), ir viena komanda galite sukurti ir paleisti visas savo paslaugas.

Pavyzdinis docker-compose.yml paprastai žiniatinklio programai su Redis talpykla gali atrodyti taip:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:80"
    volumes:
      - .:/app
    depends_on:
      - redis
  redis:
    image: "redis:alpine"

Naudodami šį failą galite paleisti abi paslaugas naudodami docker-compose up.

Tomai nuolatiniams duomenims

Kaip minėta, konteineriai yra efemeriški. Jei vykdote duomenų bazę, norėsite išsaugoti duomenis už konteinerio gyvavimo ciklo ribų. Docker tomai yra pageidaujamas mechanizmas duomenims, sugeneruotiems ir naudojamiems Docker konteinerių, išsaugoti. Tomus valdo Docker ir jie saugomi už konteinerio rašomo sluoksnio ribų.

Norėdami prijungti tomą vykdydami konteinerį:

docker run -v my-data-volume:/var/lib/mysql mysql:latest

Ši komanda sukuria tomą pavadinimu my-data-volume ir prijungia jį prie /var/lib/mysql MySQL konteinerio viduje, užtikrindama, kad jūsų duomenų bazės duomenys išliks.

Docker tinklai

Pagal numatytuosius nustatymus kiekvienas Docker konteineris gauna savo tinklo vardų erdvę. Norėdami įgalinti ryšį tarp konteinerių, turite sukurti tinklą ir prijungti savo konteinerius prie jo. Docker pateikia kelis tinklų tvarkykles, o bridge tinklas yra labiausiai paplitęs vieno pagrindinio kompiuterio diegimams.

Kai naudojate Docker Compose, jis automatiškai sukuria numatytąjį tinklą jūsų paslaugoms, leidžiantį joms bendrauti naudojant savo paslaugų pavadinimus.

Docker Hub ir privatūs registrai

Docker Hub panaudojimas yra labai svarbus dalijantis vaizdais komandos viduje arba su visuomene. Nuosavybės programoms privataus registro nustatymas yra būtinas saugumui ir kontroliuojamai prieigai. Debesies paslaugų teikėjai, tokie kaip Amazon Elastic Container Registry (ECR), Google Container Registry (GCR) ir Azure Container Registry (ACR), siūlo valdomas privačias registro paslaugas.

Saugumo geriausia praktika

Nors Docker suteikia izoliaciją, saugumas yra nuolatinis rūpestis, ypač pasauliniame kontekste:

Docker pasauliniame kontekste: mikropaslaugos ir CI/CD

Docker tapo šiuolaikinės programinės įrangos architektūros kertiniu akmeniu, ypač mikropaslaugų ir nuolatinės integracijos / nuolatinio diegimo (CI/CD) konvejeriuose.

Mikropaslaugų architektūra

Mikropaslaugos suskaido didelę programą į mažesnes, nepriklausomas paslaugas, kurios bendrauja per tinklą. Kiekviena mikropaslauga gali būti kuriama, diegiama ir keičiama masteliu nepriklausomai. Docker idealiai tinka šiai architektūrai:

CI/CD konvejerius

CI/CD automatizuoja programinės įrangos pristatymo procesą, įgalindama dažnus ir patikimus programų atnaujinimus. Docker atlieka gyvybiškai svarbų vaidmenį CI/CD:

Internacionalizacijos ir lokalizacijos aspektai

Pasaulinėms programoms Docker taip pat gali supaprastinti internacionalizacijos (i18n) ir lokalizacijos (l10n) aspektus:

Konteinerių orkestravimas: Kubernetes vaidmuo

Nors Docker puikiai tinka atskiriems konteineriams programuoti ir vykdyti, didelio konteinerių skaičiaus valdymas keliuose kompiuteriuose reikalauja orkestravimo. Čia sužiba tokie įrankiai kaip Kubernetes. Kubernetes yra atvirojo kodo sistema, skirta automatizuoti konteinerinių programų diegimą, mastelio keitimą ir valdymą. Jis suteikia tokias funkcijas kaip apkrovos balansavimas, savigydymas, paslaugų atradimas ir atnaujinimai, todėl jis yra būtinas norint valdyti sudėtingas, paskirstytas sistemas.

Daugelis organizacijų naudoja Docker kurti ir programuoti savo programas, o tada naudoja Kubernetes tiems Docker konteineriams diegti, keisti mastelį ir valdyti gamybos aplinkose.

Išvada

Docker iš esmės pakeitė, kaip kuriame, siunčiame ir vykdome programas. Pasaulinėms kūrimo komandoms jo gebėjimas užtikrinti nuoseklumą, perkeliamumą ir efektyvumą įvairiose aplinkose yra neįkainojamas. Pritaikydami Docker ir jo pagrindines sąvokas, galite supaprastinti savo kūrimo darbo eigas, sumažinti diegimo trintį ir patikimai pristatyti programas vartotojams visame pasaulyje.

Pradėkite eksperimentuodami su paprastomis programomis ir palaipsniui tyrinėkite daugiau pažangių funkcijų, tokių kaip Docker Compose ir integracija su CI/CD konvejeriuose. Konteinerizacijos revoliucija jau čia, o Docker supratimas yra labai svarbus įgūdis bet kuriam šiuolaikiniam kūrėjui ar DevOps specialistui, siekiančiam sėkmės pasaulinėje technologijų arenoje.