Docker Compose: kubva pakuvandudza kusvika pakugadzirwa

Dudziro yePodcast transcription yakagadzirirwa kutarisira kutanga kwekosi "Linux Administrator"

Docker Compose: kubva pakuvandudza kusvika pakugadzirwa

Docker Compose chishandiso chinoshamisa chekugadzira chinoshanda
nharaunda ye stack inoshandiswa mukushandisa kwako. Inokubvumira kutsanangura
chimwe nechimwe chikamu chekushandisa kwako, uchitevera yakajeka uye yakapusa syntax mukati YAML-
mafaira
.

Nekuuya kwe docker nyora v3 aya mafaera eYAML anogona kushandiswa zvakananga munzvimbo yekugadzira kana uchishanda nawo
cluster Docker swarm.

Asi izvi zvinoreva here kuti iwe unogona kushandisa yakafanana docker-compose faira mukati
nzira yekusimudzira uye munzvimbo yekugadzira? Kana kuti shandisa iyo yakafanana faira ye
staging? Zvakanaka, kazhinji, hongu, asi nokuda kwekushanda uku tinoda zvinotevera:

  • Variable interpolation: kushandisa nharaunda zvinosiyana kune vamwe
    kukosha kunoshanduka munharaunda yega yega.
  • Configuration override: kugona kutsanangura yechipiri (kana chero
    imwe inotevera) docker-compose faira iyo inoshandura chimwe chinhu maererano
    kutanga, uye docker compose ichaita hanya yekubatanidza mafaera ese.

Misiyano pakati pekusimudzira uye mafaira ekugadzira

Panguva yekusimudzira, iwe ungangoda kutarisa shanduko yekodhi mukati
nguva chaiyo. Kuti uite izvi, kazhinji vhoriyamu ine kodhi kodhi inoiswa mukati
mudziyo une nguva yekumhanya yekushandisa kwako. Asi kune nzvimbo yekugadzira
Iyi nzira haina kukodzera.

Mukugadzira, une cluster ine node dzakawanda, uye vhoriyamu ndeyemunharaunda
hukama kune node iyo mudziyo wako (kana sevhisi) iri kushanda, saka hauite
iwe unogona kukwidza iyo kodhi kodhi pasina mashandiro akaomarara anosanganisira
kodhi kuwiriranisa, masaini, nezvimwe.

Pane kudaro, isu tinowanzoda kugadzira mufananidzo une chaiyo vhezheni yekodhi yako.
Itsika yekuimaka neiyo tag yakakodzera (unogona kushandisa semantic
shanduro kana imwe sisitimu pakufunga kwako).

Configuration Override

Tichifunga nezvekusiyana uye kuti kuvimba kwako kunogona kusiyana mumamiriro ezvinhu
kusimudzira uye kugadzira, zviri pachena kuti isu tichada akasiyana dhizaini mafaira.

Docker compose inotsigira kubatanidza akasiyana ekunyora mafaera kune
kuwana gadziriro yekupedzisira. Kuti izvi zvinoshanda sei zvinogona kuonekwa mumuenzaniso:

$ 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

Sezvakataurwa, docker compose inotsigira kusanganisa akawanda anonyora -
mafaira, izvi zvinokutendera kuti uwedzere maparamendi akasiyana mufaira rechipiri. Semuyenzaniso:

$ 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

Iyi syntax haina kunyatso kurongeka panguva yekusimudzira, kana murairo
zvinoda kuitwa kakawanda.

Sezvineiwo, docker compose inotarisa otomatiki kune yakakosha faira inonzi
docker-compose.override.yml kukurira kukosha docker-kunyora.yml. kana
tumidza zita rechipiri faira, unowana mhedzisiro imwe chete, uchingoshandisa yekutanga kuraira:

$ 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

Zvakanaka, zviri nyore kuyeuka.

Interpolation of Variables

Configuration mafaira rutsigiro kududzira
variables
uye default values. Ndiko kuti, iwe unogona kuita zvinotevera:

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

Uye kana ukadaro docker-compose kuvaka (kana kusundira) pasina shanduko yemamiriro ekunze
$MY_SERVICE_VERSION, kukosha kuchashandiswa tsvaasi kana ukaisa
kukosha kwezvakatipoteredza kushanduka kusati kwavakwa, ichashandiswa pakuvaka kana kusunda
kurejista private.registry.mine.

Mitemo yangu

Nzira dzinoshanda kwandiri dzinogona kukushandira iwewo. Ndinotevera izvi
mitemo iri nyore:

  • Yese mirwi yangu yekugadzira, kusimudzira (kana mamwe nharaunda) inotsanangurwa kuburikidza
    docker-nyora mafaira
  • Mafaira ekugadzirisa anodiwa kuvhara nharaunda dzangu dzese, zvakanyanya sezvinobvira
    dzivisa kudzokorora.
  • Ndinoda murairo mumwe wakapfava wekushanda munzvimbo yega yega.
  • Iyo huru yekugadzirisa inotsanangurwa mufaira docker-kunyora.yml.
  • Nzvimbo dzakasiyana-siyana dzinoshandiswa kutsanangura ma tag emifananidzo kana zvimwe
    zvakasiyana-siyana zvinogona kusiyana kubva kune nharaunda kuenda kune zvakatipoteredza (staging, kubatanidzwa,
    production).
  • Iko kukosha kwekugadzirwa kwakasiyana-siyana kunoshandiswa sekukosha kwe
    nekusarudzika, izvi zvinoderedza njodzi kana stack yakatangwa mukugadzira pasina
    set environment variable.
  • Kutanga sevhisi munzvimbo yekugadzira, shandisa murairo docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Nzvimbo yekushanda inotanga kushandisa murairo docker-kunyora -d.

Ngatitarisei muenzaniso wakapfava.

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

Ndinogona kushandisa docker-compose (docker-compose up)kumhanyisa stack mukati
Development mode ine source code yakaiswa mukati /project/src.

Ini ndinogona kushandisa aya mafaera akafanana mukugadzira! Uye ndaigona kushandisa zvechokwadi
same file docker-kunyora.yml zvekutamba. Kuwedzera izvi
kugadzira, ini ndinongoda kuvaka uye kutumira chifananidzo chine tag yakafanotsanangurwa
pachikamu cheCI:

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

Mukugadzira, izvi zvinogona kuitwa uchishandisa inotevera mirairo:

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

Uye kana iwe uchida kuita zvakafanana pachikuva, iwe unongoda kutsanangura
zvinodiwa nharaunda zvinosiyana zvekushanda munzvimbo yekugadzira:

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

Nekuda kweizvozvo, takashandisa maviri akasiyana docker-nyora mafaera, ayo asina
Duplicate zvigadziriso zvinogona kushandiswa kune chero nharaunda yaunayo!

Dzidza zvakawanda nezvekosi "Linux Administrator"

Source: www.habr.com

Voeg