Docker Compose: ji pêşveçûnê heya hilberînê

Wergera transkrîpsiyona podcastê ku li hêviya destpêka qursê hatiye amadekirin "Rêveberê Linux"

Docker Compose: ji pêşveçûnê heya hilberînê

Docker Compose ji bo afirandina xebatek amûrek ecêb e
jîngeha ji bo stûna ku di serlêdana we de tê bikar anîn. Ew dihêle hûn diyar bikin
her pêkhateya serîlêdana we, li pey hevoksaziyek zelal û hêsan e YAML-
pelan
.

Bi hatina docker compose v3 van pelên YAML dema ku bi wan re dixebitin rasterast di hawîrdora hilberînê de têne bikar anîn
cluster Docker swarm.

Lê gelo ev tê vê wateyê ku hûn dikarin heman pelê docker-compose tê de bikar bînin
pêvajoya pêşveçûnê û di hawirdora hilberînê de? An jî heman pelê ji bo bikar bînin
staging? Welê, bi gelemperî, erê, lê ji bo vê fonksiyonê em hewceyê jêrîn in:

  • Navbera guhêrbar: ji bo hinan guhêrbarên jîngehê bikar tînin
    nirxên ku di her hawîrdorê de diguherin.
  • Veguheztina veavakirinê: şiyana danasîna duyemîn (an yek
    ya din a paşîn) pelê docker-compose ku dê di derbarê de tiştek biguhezîne
    yekem, û docker compose dê balê bikişîne ser yekkirina her du pelan.

Cûdahî di navbera pelên pêşveçûn û hilberînê de

Di dema pêşkeftinê de, hûn ê bi îhtîmalek mezin bixwazin ku guhartinên kodê tê de kontrol bikin
dema rast. Ji bo kirina vê yekê, bi gelemperî cildê bi koda çavkaniyê tê de tête danîn
konteynir ku ji bo serîlêdana we dema xebitandinê vedihewîne. Lê ji bo hawirdora hilberînê
Ev rêbaz ne guncaw e.

Di hilberînê de, we komek bi gelek girêkan heye, û hêjmar herêmî ye
nisbet bi girêka ku konteynera (an karûbarê) we lê dimeşe, ji ber vê yekê hûn nakin
hûn dikarin koda çavkaniyê bêyî operasyonên tevlihev ên ku tê de hene siwar bikin
hevdemkirina kodê, îşaret, hwd.

Di şûna wê de, em bi gelemperî dixwazin ku bi guhertoyek taybetî ya koda we re wêneyek çêbikin.
Adet e ku meriv wê bi nîşana guncan nîşan bide (hûn dikarin semantîk bikar bînin
guhertokirin an pergalek din li gorî we).

Veavakirin Serhildan

Ji ber cûdahiyan û ku girêdayîbûna we dibe ku di senaryoyan de cûda bibin
pêşkeftin û hilberandin, diyar e ku em ê hewceyê pelên veavakirina cihêreng bin.

Docker compose piştgirî dike ku pelên berhevokê yên cihêreng bi hev re bike
veavakirina dawîn bistînin. Ev çawa dixebite dikare di nimûneyê de were dîtin:

$ cat docker-compose.yml
version: "3.2"

services:
  whale:
    image: docker/whalesay
    command: ["cowsay", "hello!"]
$ docker-compose up
Creating network "composeconfigs_default" with the default driver
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ________
whale_1  | < hello! >
whale_1  |  --------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Wekî ku tê gotin, docker compose piştgirî dide berhevkirina pirjimaran -
pelan, ev dihêle hûn di pelê duyemîn de pîvanên cihêreng bişopînin. Bo nimûne:

$ cat docker-compose.second.yml
version: "3.2"
services:
  whale:
    command: ["cowsay", "bye!"]

$ docker-compose -f docker-compose.yml -f docker-compose.second.yml up
Creating composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Ev hevoksazî di dema pêşkeftinê de, dema fermanê, ne pir hêsan e
dê hewce bike ku gelek caran were kirin.

Xwezî, docker compose bixweber li pelek taybetî ya ku jê re tê gotin digere
docker-compose.override.yml ji bo nirxan derbas bikin docker-berhevkirin.yml. Ger
navê pelê duyemîn biguherîne, hûn heman encamê digirin, tenê emrê orîjînal bikar tînin:

$ mv docker-compose.second.yml docker-compose.override.yml
$ docker-compose up
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Okay, ew hêsantir e ku bi bîr bîne.

Navberkirina Guherbaran

Piştgiriya pelên vesazkirinê interpolation
variables
û nirxên xwerû. Ew e, hûn dikarin jêrîn bikin:

services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...

Û eger hûn bikin docker-compose build (an push) bê guhêrbar jîngehê
$MY_SERVICE_VERSION, nirx dê were bikar anîn dawîtirînlê heke hûn saz bikin
nirxa guhêrbara jîngehê berî çêkirinê, ew ê di dema çêkirinê an dehfdanê de were bikar anîn
ji bo qeydê taybet.registry.mine.

prensîbên min

Nêzîkatiyên ku ji bo min dixebitin dibe ku ji bo we jî bixebitin. Ez van dişopînim
qaîdeyên hêsan:

  • Hemî stûnên min ên ji bo hilberandin, pêşkeftin (an jîngehên din) bi navgîniyê têne destnîşan kirin
    pelên docker-compose
  • Pelên vesazkirinê hewce ne ku hemî hawîrdorên min, bi qasî ku pêkan, veşêrin
    xwe ji dubarekirinê dûr bixin.
  • Ji min re yek fermanek hêsan hewce ye ku di her hawîrdorê de bixebitim.
  • Veavakirina sereke di pelê de tête diyar kirin docker-berhevkirin.yml.
  • Guherbarên jîngehê ji bo danasîna tagên wêneyê an yên din têne bikar anîn
    guhêrbarên ku dibe ku ji hawîrdora hawîrdorê cûda cûda bibin (qonaxa, entegrasyon,
    çêkerî).
  • Nirxên guhêrbarên hilberînê wekî nirx têne bikar anîn
    ji hêla xwerû ve, ev xetereyan kêm dike heke stêk bêyî hilberînê were destpêkirin
    guherbar jîngehê set.
  • Ji bo destpêkirina karûbarek li hawîrdorek hilberînê, fermanê bikar bînin docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Jîngeha xebatê bi karanîna fermanê dest pê dike docker-compose up -d.

Ka em li mînakek hêsan binêrin.

# docker-compose.yml
...
services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
    environment:
      API_ENDPOINT: ${API_ENDPOINT:-https://production.my-api.com}
...

И

# docker-compose.override.yml
...
services:
  my-service:
    ports: # This is needed for development!
      - 80:80
    environment:
      API_ENDPOINT: https://devel.my-api.com
    volumes:
      - ./:/project/src
...

Ez dikarim bikar bînim docker-compose (docker-compose up)to run the stack in
moda pêşkeftinê ya bi koda çavkaniyê ya ku tê de hatî danîn /proje/src.

Ez dikarim van heman pelan di hilberînê de bikar bînim! Û ez bê guman dikarim bikar bînim
heman pelê docker-berhevkirin.yml ji bo sehnê. Ji bo berfirehkirina vê
hilberandin, ez tenê hewce dikim ku wêneyê bi etîketek diyarkirî ava bikim û bişînim
di qonaxa CI de:

export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push

Di hilberînê de, ev dikare bi karanîna fermanên jêrîn were xebitandin:

export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

Û heke hûn dixwazin li ser qonaxê heman yekê bikin, hûn tenê hewce ne ku diyar bikin
Guhertoyên hawîrdorê yên pêwîst ji bo xebatê di hawîrdora sehneyê de:

export MY_SERVICE_VERSION=1.2.3
export API_ENDPOINT=http://staging.my-api.com
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

Wekî encamek, me du pelên cûda yên docker-compose, ku bêyî wan bikar anîn
Veavakirinên dubarekirî dikarin ji bo her hawîrdora we were bikar anîn!

Di derbarê qursê de bêtir fêr bibin "Rêveberê Linux"

Source: www.habr.com

Add a comment