Docker Compose: manomboka amin'ny fampandrosoana mankany amin'ny famokarana

Fandikana ny transcription podcast nomanina ho fiandrasana ny fanombohan'ny fampianarana "Linux Administrator"

Docker Compose: manomboka amin'ny fampandrosoana mankany amin'ny famokarana

Docker Compose dia fitaovana mahagaga hamoronana asa
tontolo iainana ho an'ny stack ampiasaina amin'ny fampiharanao. Izany dia ahafahanao mamaritra
ny singa tsirairay amin'ny fampiharanao, manaraka ny syntax mazava sy tsotra ao YAML-
rakitra
.

Miaraka amin'ny fahatongavan'ny Docker compose v3 ireo rakitra YAML ireo dia azo ampiasaina mivantana amin'ny tontolon'ny famokarana rehefa miasa
sampahom-boaloboka Docker andiam-be.

Saingy midika ve izany fa afaka mampiasa ny docker-compose file ianao
dingana fampandrosoana sy eo amin'ny tontolo famokarana? Na ampiasao ny rakitra mitovy amin'ny
fandaharana? Eny, amin'ny ankapobeny, eny, fa ho an'ity fampiasa ity dia mila ireto manaraka ireto isika:

  • Variable interpolation: mampiasa ny fari-piainana ho an'ny sasany
    soatoavina izay miova isaky ny tontolo iainana.
  • Fanombanana ny Configuration: fahafahana mamaritra segondra iray (na iray
    hafa manaraka) docker-compose rakitra izay hanova zavatra momba ny
    Voalohany, ary ny docker compose dia hikarakara ny fampifangaroana ireo rakitra roa ireo.

Ny fahasamihafana eo amin'ny rakitra fampandrosoana sy famokarana

Mandritra ny fampandrosoana dia mety ho tianao ny hanamarina ny fiovan'ny code
amin'ny fotoana katroka. Mba hanaovana izany, matetika ny volume miaraka amin'ny kaody loharano dia napetraka ao
fitoeran-javatra misy fotoana fampandehanana ny fampiharanao. Fa ho an'ny tontolo famokarana
Tsy mety io fomba io.

Amin'ny famokarana dia manana cluster misy nodes maro ianao, ary eo an-toerana ny volume
mifandraika amin'ny node misy ny fitoeranao (na serivisy) mandeha, ka tsy manao izany ianao
azonao atao ny mametraka ny kaody loharano tsy misy asa sarotra misy
code synchronization, signals, sns.

Fa kosa, te-hamorona sary miaraka amin'ny dikan-kaody manokana izahay.
Fanao ny manamarika azy amin'ny marika mety (azonao ampiasaina ny semantic
versioning na rafitra hafa araka ny fanapahan-kevitrao).

Configuration Override

Raha jerena ny fahasamihafana sy ny mety ho tsy mitovy ny fiankinanao amin'ny sehatra
fampandrosoana sy famokarana, mazava ho azy fa mila antontan-taratasy fanamafisana samihafa isika.

Docker compose dia manohana ny fampifangaroana ireo rakitra compose samihafa
mahazo ny fanamafisana farany. Ny fomba fiasan'izany dia azo jerena amin'ny ohatra:

$ 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

Araka ny voalaza, ny docker compose dia manohana ny fampifangaroana compose maro -
fisie, mamela anao hanilika ireo masontsivana isan-karazany amin'ny rakitra faharoa izany. Ohatra:

$ 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

Ity syntax ity dia tsy dia mety loatra mandritra ny fampandrosoana, rehefa ny baiko
mila atao imbetsaka.

Soa ihany fa ny docker compose dia mitady fisie manokana antsoina hoe
docker-compose.override.yml hanilika ny soatoavina docker-compose.yml. raha
ovay anarana ny rakitra faharoa, mahazo valiny mitovy ianao, mampiasa ny baiko voalohany ihany:

$ 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

Eny, mora kokoa ny mitadidy izany.

Interpolation of Variables

Fanohanana ny rakitra fanamafisana teny nasisika
hiovaova
ary ny sanda default. Izany hoe, azonao atao ireto manaraka ireto:

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

Ary raha manao izany ianao docker-compose build (na manosika) tsy misy fiovan'ny tontolo iainana
$MY_SERVICE_VERSION, ny sandany no hampiasaina faranyfa raha nametraka
ny sandan'ny fari-piainan'ny tontolo iainana alohan'ny fanorenana, dia hampiasaina rehefa manorina na manosika
mankany amin'ny rejisitra private.registry.mine.

Ny fitsipiko

Mety hiasa ho anao koa ireo fomba fiasa mety amiko. Arahiko ireto
fitsipika tsotra:

  • Ny stacks rehetra ho an'ny famokarana, ny fampandrosoana (na ny tontolo hafa) dia voafaritra amin'ny alalan'ny
    docker-compose rakitra
  • Ny fichier configuration ilaina mba handrakotra ny tontoloko rehetra, araka izay azo atao
    ialao ny dika mitovy.
  • Mila baiko tsotra iray aho mba hiasa amin'ny tontolo tsirairay.
  • Voafaritra ao amin'ny rakitra ny fandrindrana fototra docker-compose.yml.
  • Ny fari-piainan'ny tontolo iainana dia ampiasaina hamaritana ny mari-pamantarana sary na hafa
    Variable izay mety tsy mitovy amin'ny tontolo iainana (fandrindrana, fampidirana,
    famokarana).
  • Ny sandan'ny fari-pamokarana dia ampiasaina ho sanda ho an'ny
    Amin'ny alΓ lan'ny default, izany dia manamaivana ny risika raha toa ka atomboka amin'ny famokarana tsy misy izany
    mametraka fari-piainana manodidina.
  • Mba hanombohana serivisy amin'ny tontolo famokarana dia ampiasao ny baiko fametrahana docker stack - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Ny tontolon'ny asa dia manomboka mampiasa ny baiko docker-mandrafitra -d.

Andeha isika hijery ohatra tsotra.

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

Afaka mampiasa aho docker-compose (docker-compose up)hampandeha ny stack
fomba fampandrosoana miaraka amin'ny kaody loharano napetraka ao /projet/src.

Afaka mampiasa ireo rakitra ireo ihany aho amin'ny famokarana! Ary azoko ampiasaina tokoa
mitovy rakitra docker-compose.yml ho an'ny fampisehoana. Mba hanitarana izany amin'ny
famokarana, mila manamboatra sy mandefa ny sary miaraka amin'ny marika efa voafaritra mialoha aho
amin'ny dingana CI:

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

Amin'ny famokarana dia azo atao ny mampiasa ireto baiko manaraka ireto:

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

Ary raha te hanao toy izany koa eny an-tsehatra ianao dia mila mamaritra fotsiny
Ny fari-piainan'ny tontolo iainana ilaina amin'ny fiasana amin'ny tontolon'ny sehatra:

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

Vokatr'izany dia nampiasa docker-compose docker roa izahay, izay tsy misy
Azo ampiasaina amin'ny tontolo rehetra anananao ny fanamafisana dika mitovy!

Mianara bebe kokoa momba ny fianarana "Linux Administrator"

Source: www.habr.com

Add a comment