Cyfansoddi Docker: o ddatblygiad i gynhyrchu

Cyfieithiad o'r trawsgrifiad o'r podlediad a baratowyd gan ragweld dechrau'r cwrs "Gweinyddwr Linux"

Cyfansoddi Docker: o ddatblygiad i gynhyrchu

Mae Docker Compose yn offeryn anhygoel ar gyfer creu bwrdd gwaith
amgylchedd ar gyfer y pentwr a ddefnyddir yn eich cais. Mae'n caniatΓ‘u ichi ddiffinio
pob cydran o'ch cais, gan ddilyn cystrawen glir a syml i mewn YAML-
ffeiliau
.

Gyda dyfodiad docker cyfansoddi v3 gellir defnyddio'r ffeiliau YAML hyn yn uniongyrchol yn yr amgylchedd cynhyrchu, wrth weithio gyda nhw
clwstwr Swarm Dociwr.

Ond a yw hynny'n golygu y gallwch chi ddefnyddio'r un ffeil cyfansoddi docwr i mewn
broses ddatblygu ac amgylchedd cynhyrchu? Neu defnyddiwch yr un ffeil ar gyfer
llwyfannu? Wel, yn gyffredinol, ie, ond ar gyfer swyddogaethau o'r fath mae angen y canlynol arnom:

  • Rhyngosod newidiol: defnyddio newidynnau amgylchedd i rai
    gwerthoedd sy'n newid ym mhob amgylchedd.
  • Diystyru cyfluniad: y gallu i ddiffinio eiliad (neu unrhyw un
    ffeil dilynol arall) docker-compose a fydd yn newid rhywbeth yn ei gylch
    yr un cyntaf, a bydd cyfansoddi docker yn gofalu am uno'r ddwy ffeil.

Gwahaniaethau rhwng ffeiliau datblygu a chynhyrchu

Yn ystod datblygiad, mae'n debyg y byddwch am wirio am newidiadau cod i mewn
amser real. I wneud hyn, fel arfer, mae'r cyfaint gyda'r cod ffynhonnell wedi'i osod i mewn
cynhwysydd sy'n cynnwys yr amser rhedeg ar gyfer eich cais. Ond ar gyfer amgylchedd cynhyrchu
nid yw'r ffordd hon yn addas.

Wrth gynhyrchu mae gennych glwstwr aml-nΓ΄d ac mae'r cyfaint yn lleol
o'i gymharu Γ’'r gwesteiwr y mae eich cynhwysydd (neu wasanaeth) yn rhedeg ymlaen, felly nid ydych chi
gallwch osod y cod ffynhonnell heb weithrediadau cymhleth, sy'n cynnwys
cydamseru cod, signalau, ac ati.

Yn lle hynny, rydyn ni fel arfer eisiau creu delwedd gyda fersiwn benodol o'ch cod.
Mae'n arferol ei farcio gyda'r tag priodol (gallwch ddefnyddio semantig
fersiwn neu system arall o'ch dewis).

Cyfluniad diystyru

O ystyried y gwahaniaethau ac y gall eich dibyniaethau fod yn wahanol mewn senarios
datblygu a chynhyrchu, mae'n amlwg y bydd angen gwahanol ffeiliau cyfluniad arnom.

Mae Docker compose yn cefnogi uno gwahanol ffeiliau cyfansoddi i
cael y cyfluniad terfynol. Mae sut mae'n gweithio i'w weld mewn enghraifft:

$ 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

Fel y dywedwyd, mae cyfansoddi docwr yn cefnogi cyfuno cyfansoddi lluosog-
ffeiliau, mae hyn yn caniatΓ‘u ichi ddiystyru amrywiol opsiynau yn yr ail ffeil. Er enghraifft:

$ 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

Nid yw'r gystrawen hon yn gyfleus iawn yn y broses ddatblygu, pan fydd y gorchymyn
angen ei wneud sawl gwaith.

Yn ffodus, mae docker compose yn edrych yn awtomatig am ffeil arbennig o'r enw
docwr-gyfansoddi.override.yml i ddiystyru gwerthoedd docker-compose.yml. Os
ailenwi'r ail ffeil, fe gewch yr un canlyniad, gan ddefnyddio'r gorchymyn gwreiddiol yn unig:

$ 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

Iawn, mae hynny'n haws i'w gofio.

Rhyngosod Amrywiol

Cefnogaeth ffeiliau ffurfweddu rhyngosod
newidynnau
a gwerthoedd diofyn. Hynny yw, gallwch chi wneud y canlynol:

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

Ac os gwnewch adeiladu (neu wthio) cyfansoddi docwr heb newidyn amgylchedd
$MY_SERVICE_VERSION, bydd y gwerth yn cael ei ddefnyddio diweddarafond os gosodwch
gwerth y newidyn amgylchedd cyn yr adeiladu, bydd yn cael ei ddefnyddio wrth adeiladu neu wthio
i gofrestru mwynglawdd.cofrestrfa breifat.

Fy egwyddorion

Efallai y bydd dulliau sy'n gyfleus i mi yn ddefnyddiol i chi. Rwy'n dilyn hyn
rheolau syml:

  • Mae fy holl staciau ar gyfer cynhyrchu, datblygu (neu amgylcheddau eraill) yn cael eu diffinio drwy
    ffeiliau cyfansoddi docwr.
  • Y ffeiliau cyfluniad sydd eu hangen i gwmpasu fy holl amgylcheddau, uchafswm.
    osgoi dyblygu.
  • Mae angen un gorchymyn syml arnaf i weithio ym mhob amgylchedd.
  • Mae'r prif ffurfweddiad wedi'i ddiffinio yn y ffeil docker-compose.yml.
  • Defnyddir newidynnau amgylchedd i ddiffinio tagiau delwedd neu eraill
    newidynnau a all newid o amgylchedd i amgylchedd (llwyfannu, integreiddio,
    cynhyrchu).
  • Defnyddir gwerthoedd newidynnau ar gyfer cynhyrchu fel gwerthoedd gan
    yn ddiofyn, mae hyn yn lleihau'r risgiau os ydych chi'n rhedeg y pentwr wrth gynhyrchu hebddo
    newidyn amgylchedd gosod.
  • I ddechrau gwasanaeth mewn amgylchedd cynhyrchu, defnyddiwch y gorchymyn docker stack deploy - compose-file docker-compose.yml - with-registry-auth my-stack-name.
  • Dechreuir yr amgylchedd gwaith gyda'r gorchymyn docker-compose up -d.

Gadewch i ni edrych ar enghraifft syml.

# 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
...

Gallaf ddefnyddio docyfansoddi (docer-compose up)i redeg y pentwr yn
modd datblygu gyda chod ffynhonnell wedi'i osod i mewn /prosiect/src.

Gallaf ddefnyddio'r un ffeiliau wrth gynhyrchu! A gallwn i ddefnyddio yn union
un ffeil docker-compose.yml ar gyfer llwyfannu. Er mwyn ehangu hyn i
cynhyrchu, does ond angen i mi adeiladu ac anfon y ddelwedd gyda thag wedi'i ddiffinio ymlaen llaw
ar y cam CI:

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

Wrth gynhyrchu, gellir rhedeg hyn gyda'r gorchmynion canlynol:

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

Ac os ydych chi am wneud yr un peth ar y llwyfan, does ond angen i chi ddiffinio
newidynnau amgylchedd angenrheidiol i weithio yn yr amgylchedd llwyfannu:

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

O ganlyniad, fe wnaethom ddefnyddio dwy ffeil cyfansoddi docwr wahanol, sydd, hebddynt
gellir defnyddio ffurfweddiadau dyblyg ar gyfer unrhyw un o'ch amgylcheddau!

Dysgwch fwy am y cwrs "Gweinyddwr Linux"

Ffynhonnell: hab.com

Ychwanegu sylw