Docker Tunga: kutoka kwa maendeleo hadi uzalishaji

Tafsiri ya unukuzi wa podikasti iliyotayarishwa kwa kutarajia kuanza kwa kozi "Msimamizi wa Linux"

Docker Tunga: kutoka kwa maendeleo hadi uzalishaji

Docker Compose ni zana nzuri ya kuunda kazi
mazingira ya rafu inayotumika katika programu yako. Inakuwezesha kufafanua
kila sehemu ya programu yako, kufuatia syntax wazi na rahisi katika YAML-
mafaili
.

Pamoja na ujio docker kutunga v3 faili hizi za YAML zinaweza kutumika moja kwa moja katika mazingira ya utayarishaji unapofanya kazi nazo
nguzo Pumba la Docker.

Lakini hii inamaanisha kuwa unaweza kutumia faili sawa ya kutunga-docker ndani
mchakato wa maendeleo na katika mazingira ya uzalishaji? Au tumia faili sawa kwa
jukwaa? Kweli, kwa ujumla, ndio, lakini kwa utendakazi huu tunahitaji yafuatayo:

  • Ufafanuzi unaobadilika: kutumia vigeu vya mazingira kwa baadhi
    maadili yanayobadilika katika kila mazingira.
  • Kubatilisha usanidi: uwezo wa kufafanua sekunde (au yoyote
    faili nyingine inayofuata) ya kutunga docker ambayo itabadilisha kitu kuhusu
    kwanza, na utunzi wa docker utachukua huduma ya kuunganisha faili zote mbili.

Tofauti kati ya faili za ukuzaji na uzalishaji

Wakati wa usanidi, utataka kuangalia mabadiliko ya nambari ndani
Muda halisi. Ili kufanya hivyo, kawaida sauti iliyo na msimbo wa chanzo huwekwa ndani
chombo ambacho kina muda wa kutekelezwa kwa programu yako. Lakini kwa mazingira ya uzalishaji
Njia hii haifai.

Katika uzalishaji, una nguzo yenye nodes nyingi, na kiasi ni cha ndani
kuhusiana na nodi ambayo chombo chako (au huduma) kinaendesha, kwa hivyo hufanyi
unaweza kuweka msimbo wa chanzo bila shughuli ngumu zinazojumuisha
maingiliano ya msimbo, ishara, n.k.

Badala yake, kwa kawaida tunataka kuunda picha yenye toleo mahususi la msimbo wako.
Ni kawaida kuiweka alama na lebo inayofaa (unaweza kutumia semantic
toleo au mfumo mwingine kwa hiari yako).

Ubatilishaji wa Usanidi

Kwa kuzingatia tofauti na kwamba utegemezi wako unaweza kutofautiana katika hali
maendeleo na uzalishaji, ni wazi kwamba tutahitaji faili tofauti za usanidi.

Utunzi wa Docker inasaidia kuunganisha faili tofauti za kutunga kwa
pata usanidi wa mwisho. Jinsi hii inavyofanya kazi inaweza kuonekana katika mfano:

$ 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

Kama ilivyosemwa, utunzi wa docker inasaidia kuchanganya nyimbo nyingi -
faili, hii hukuruhusu kubatilisha vigezo mbalimbali kwenye faili ya pili. Kwa mfano:

$ 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

Syntax hii si rahisi sana wakati wa maendeleo, wakati amri
itahitaji kufanywa mara nyingi.

Kwa bahati nzuri, kutunga kwa docker moja kwa moja hutafuta faili maalum inayoitwa
docker-compose.override.yml kupuuza maadili docker-compose.yml. Ikiwa
badilisha jina la faili ya pili, unapata matokeo sawa, kwa kutumia tu amri ya asili:

$ 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

Sawa, hiyo ni rahisi kukumbuka.

Ufafanuzi wa Vigezo

Usaidizi wa faili za usanidi tafsiri
vigezo
na maadili chaguo-msingi. Hiyo ni, unaweza kufanya yafuatayo:

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

Na ukifanya hivyo docker-compose build (au sukuma) bila kubadilika kwa mazingira
$MY_SERVICE_VERSION, thamani itatumika karibunilakini ukiweka
thamani ya kutofautiana kwa mazingira kabla ya kujenga, itatumika wakati wa kujenga au kusukuma
kwa rejista mgodi.wa.binafsi.

Kanuni zangu

Mbinu zinazonifanyia kazi zinaweza kukufanyia kazi pia. Nafuata hizi
sheria rahisi:

  • Ratiba zangu zote za uzalishaji, ukuzaji (au mazingira mengine) zimefafanuliwa kupitia
    faili za docker-tunga
  • Faili za usanidi zinahitajika kufunika mazingira yangu yote, iwezekanavyo
    epuka kurudia.
  • Nahitaji amri moja rahisi kufanya kazi katika kila mazingira.
  • Configuration kuu imefafanuliwa katika faili docker-compose.yml.
  • Vigezo vya mazingira hutumiwa kufafanua tagi za picha au nyinginezo
    vigezo ambavyo vinaweza kutofautiana kutoka kwa mazingira hadi mazingira (hatua, ujumuishaji,
    uzalishaji).
  • Thamani za anuwai za uzalishaji hutumiwa kama maadili ya
    kwa chaguomsingi, hii inapunguza hatari ikiwa rafu itazinduliwa katika toleo la umma bila
    kuweka kutofautiana kwa mazingira.
  • Ili kuanza huduma katika mazingira ya uzalishaji, tumia amri uwekaji wa stack ya docker - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Mazingira ya kufanya kazi huanza kwa kutumia amri docker-compose up -d.

Hebu tuangalie mfano rahisi.

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

Naweza kutumia docker-compose (docker-compose up)kuendesha stack ndani
hali ya ukuzaji na msimbo wa chanzo umewekwa ndani /mradi/src.

Ninaweza kutumia faili hizi katika utengenezaji! Na hakika ningeweza kutumia
faili sawa docker-compose.yml kwa jukwaa. Ili kupanua hii
uzalishaji, ninahitaji tu kuunda na kutuma picha na lebo iliyoainishwa
katika hatua ya CI:

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

Katika uzalishaji, hii inaweza kuendeshwa kwa kutumia amri zifuatazo:

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

Na ikiwa unataka kufanya vivyo hivyo kwenye hatua, unahitaji tu kufafanua
vigezo muhimu vya mazingira kwa ajili ya kufanya kazi katika mazingira ya jukwaa:

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

Kama matokeo, tulitumia faili mbili tofauti za kutunga docker, ambazo bila
Mipangilio ya nakala inaweza kutumika kwa mazingira yoyote uliyo nayo!

Jifunze zaidi kuhusu kozi "Msimamizi wa Linux"

Chanzo: mapenzi.com

Kuongeza maoni