Docker Compose: bho leasachadh gu cinneasachadh

Eadar-theangachadh den tar-sgrìobhadh podcast air ullachadh le dùil ri toiseach a’ chùrsa "Rianadair Linux"

Docker Compose: bho leasachadh gu cinneasachadh

Tha Docker Compose na inneal iongantach airson obair-obrach a chruthachadh
àrainneachd airson a’ chruaich a chleachdar san tagradh agad. Tha e a 'toirt cothrom dhut mìneachadh
gach pàirt den tagradh agad, a’ leantainn co-chòrdadh soilleir agus sìmplidh a-steach YAML-
faidhlichean
.

Le teachd dèan docker v3 faodar na faidhlichean YAML seo a chleachdadh gu dìreach san àrainneachd toraidh nuair a bhios iad ag obair leotha
cnuasachd Swarm Docker.

Ach a bheil seo a’ ciallachadh gun urrainn dhut an aon fhaidhle docker-compose a chleachdadh ann an
pròiseas leasachaidh agus anns an àrainneachd riochdachaidh? No cleachd an aon fhaidhle airson
stèidse? Uill, san fharsaingeachd, tha, ach airson an gnìomh seo feumaidh sinn na leanas:

  • Eadar-theangachadh caochlaideach: a’ cleachdadh caochladairean àrainneachd airson cuid
    luachan a tha ag atharrachadh anns gach àrainneachd.
  • Cur thairis rèiteachaidh: comas air diog (no gin
    eile às deidh sin) faidhle docker-compose a dh’ atharraicheas rudeigin a thaobh
    an toiseach, agus bidh docker compose a’ gabhail cùram den dà fhaidhle a chur còmhla.

Eadar-dhealachaidhean eadar faidhlichean leasachaidh agus toraidh

Rè leasachadh, is dòcha gum bi thu airson sùil a thoirt air atharrachaidhean còd a-steach
fìor-ùine. Gus seo a dhèanamh, mar as trice tha an tomhas-lìonaidh leis a’ chòd stòr air a chuir a-steach
soitheach anns a bheil ùine ruith airson an tagraidh agad. Ach airson àrainneachd cinneasachaidh
Chan eil an dòigh seo freagarrach.

Ann an cinneasachadh, tha cruinneachadh agad le mòran nodan, agus tha an tomhas ionadail
an coimeas ris an nód air a bheil an soitheach agad (no an t-seirbheis) a’ ruith, mar sin chan eil
faodaidh tu an còd tùsail a chuir suas às aonais obrachaidhean iom-fhillte a tha a’ toirt a-steach
sioncronadh còd, comharran, msaa.

An àite sin, mar as trice bidh sinn airson ìomhaigh a chruthachadh le dreach sònraichte den chòd agad.
Tha e àbhaisteach a chomharrachadh leis an taga iomchaidh (faodaidh tu semantic a chleachdadh
dreachdadh no siostam eile a rèir do thoil).

Configuration Override

Leis na h-eadar-dhealachaidhean agus gum faodadh do eisimeileachd a bhith eadar-dhealaichte ann an suidheachaidhean
leasachadh agus cinneasachadh, tha e soilleir gum feum sinn diofar fhaidhlichean rèiteachaidh.

Tha Docker compose a’ toirt taic do bhith a’ ceangal diofar fhaidhlichean sgrìobhaidh ri
faigh an rèiteachadh deireannach. Chithear mar a tha seo ag obair san eisimpleir:

$ 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

Mar a chaidh a ràdh, tha docker compose a’ toirt taic do bhith a’ cothlamadh grunn sgrìobhaidhean -
faidhlichean, leigidh seo leat faighinn thairis air diofar pharaimearan san dàrna faidhle. Mar eisimpleir:

$ 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

Chan eil an co-chòrdadh seo glè ghoireasach rè leasachadh, nuair a bhios an àithne
feumar a dhèanamh iomadh uair.

Gu fortanach, bidh docker compose gu fèin-ghluasadach a’ coimhead airson faidhle sònraichte ris an canar
docker-compose.override.yml gus faighinn thairis air luachan docker-compose.yml. Ma tha
ath-ainmich an dàrna faidhle, gheibh thu an aon toradh, a 'cleachdadh an òrdugh tùsail a-mhàin:

$ 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

Ceart gu leòr, tha sin nas fhasa a chuimhneachadh.

Eadar-theangachadh de Chaochladairean

Taic faidhlichean rèiteachaidh eadar-theangachadh
caochladairean
agus luachan bunaiteach. Is e sin, faodaidh tu na leanas a dhèanamh:

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

Agus ma nì thu docker-compose togail (no putadh) às aonais caochladair àrainneachd
$MY_SERVICE_VERSION, thèid an luach a chleachdadh as ùireach ma shuidhicheas tu
luach caochladair na h-àrainneachd mus tèid an togail, thèid a chleachdadh nuair a thathar a’ togail no a’ putadh
chun a’ chlàr prìobhaideach.registry.mine.

Na mo phrionnsabalan

Is dòcha gum bi na dòighean-obrach a tha ag obair dhòmhsa ag obair dhutsa cuideachd. Leanaidh mi iad seo
riaghailtean sìmplidh:

  • Tha na stacan agam uile airson cinneasachadh, leasachadh (no àrainneachdan eile) air am mìneachadh troimhe
    docker-compose faidhlichean
  • Faidhlichean rèiteachaidh a dh 'fheumar gus na h-àrainneachdan agam gu lèir a chòmhdach, cho mòr' sa ghabhas
    dùblachadh a sheachnadh.
  • Feumaidh mi aon àithne shìmplidh airson obrachadh anns gach àrainneachd.
  • Tha am prìomh rèiteachadh air a mhìneachadh san fhaidhle docker-compose.yml.
  • Bithear a’ cleachdadh caochladairean àrainneachd gus tagaichean ìomhaigh no eile a mhìneachadh
    caochladairean a dh’ fhaodadh a bhith eadar-dhealaichte bho àrainneachd gu àrainneachd (stèidse, amalachadh,
    riochdachadh).
  • Tha luachan caochladairean cinneasachaidh air an cleachdadh mar luachan airson
    gu gnàthach, lughdaichidh seo na cunnartan ma thèid a’ chruach a chuir air bhog ann an cinneasachadh às aonais
    caochladair àrainneachd stèidhichte.
  • Gus seirbheis a thòiseachadh ann an àrainneachd cinneasachaidh, cleachd an àithne cleachdadh docker stack - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Tha an àrainneachd obrach air a thòiseachadh a’ cleachdadh an àithne docker-compose suas -d.

Bheir sinn sùil air eisimpleir shìmplidh.

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

Is urrainn dhomh a chleachdadh docker-compose (docker-compose suas)a ruith a steach
modh leasachaidh le còd stòr air a chuir a-steach /pròiseact/src.

Is urrainn dhomh na h-aon fhaidhlichean sin a chleachdadh ann an riochdachadh! Agus b 'urrainn dhomh a chleachdadh gu cinnteach
aon fhaidhle docker-compose.yml airson stèidse. Gus seo a leudachadh gu
cinneasachadh, chan fheum mi ach an ìomhaigh a thogail agus a chuir le tag ro-mhìnichte
aig ìre CI:

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

Ann an cinneasachadh, faodar seo a ruith a’ cleachdadh nan òrduighean a leanas:

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

Agus ma tha thu airson an aon rud a dhèanamh air an àrd-ùrlar, chan fheum thu ach mìneachadh
caochladairean àrainneachd riatanach airson a bhith ag obair san àrainneachd stèidse:

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

Mar thoradh air an sin, chleachd sinn dà fhaidhle docker-compose eadar-dhealaichte, agus às aonais
Faodar rèiteachaidhean dùblaichte a chleachdadh airson àrainneachd sam bith a tha agad!

Ionnsaich tuilleadh mun chùrsa "Rianadair Linux"

Source: www.habr.com

Cuir beachd ann