Sagaidot kursa sākumu sagatavotās podkāsta transkripcijas tulkojums
Docker Compose ir pārsteidzošs rīks darba izveidei
vide jūsu lietojumprogrammā izmantotajam stekam. Tas ļauj definēt
katru jūsu lietojumprogrammas komponentu, ievērojot skaidru un vienkāršu sintakse
failus
Ar Advent
klasteris
Bet vai tas nozīmē, ka varat izmantot to pašu docker-compose failu
izstrādes procesā un ražošanas vidē? Vai arī izmantojiet to pašu failu
iestudējums? Nu, kopumā jā, bet šai funkcionalitātei mums ir nepieciešams:
- Mainīgo interpolācija: vides mainīgo izmantošana dažiem
vērtības, kas mainās katrā vidē. - Konfigurācijas ignorēšana: iespēja definēt sekundi (vai jebkuru
vēl viens nākamais) docker-compose fails, kas kaut ko mainīs
Pirmkārt, un docker compose parūpēsies par abu failu sapludināšanu.
Atšķirības starp izstrādes un ražošanas failiem
Izstrādes laikā jūs, visticamāk, vēlēsities pārbaudīt koda izmaiņas
īsts laiks. Lai to izdarītu, parasti tiek ievietots sējums ar avota kodu
konteiners, kurā ir jūsu lietojumprogrammas izpildlaiks. Bet ražošanas videi
Šī metode nav piemērota.
Ražošanā jums ir kopa ar daudziem mezgliem, un apjoms ir vietējs
attiecībā pret mezglu, kurā darbojas jūsu konteiners (vai pakalpojums), tāpēc jums tas nav jādara
avota kodu var uzstādīt bez sarežģītām darbībām, kas ietver
kodu sinhronizācija, signāli utt.
Tā vietā mēs parasti vēlamies izveidot attēlu ar noteiktu jūsu koda versiju.
Ir ierasts to atzīmēt ar atbilstošu tagu (varat izmantot semantisko
versiju vai cita sistēma pēc jūsu ieskatiem).
Konfigurācijas ignorēšana
Ņemot vērā atšķirības un to, ka jūsu atkarības dažādos scenārijos var atšķirties
izstrāde un ražošana, ir skaidrs, ka mums būs nepieciešami dažādi konfigurācijas faili.
Docker Compose atbalsta dažādu sastādīšanas failu sapludināšanu
iegūt galīgo konfigurāciju. Kā tas darbojas, var redzēt piemērā:
$ 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
Kā jau minēts, dokera komponēšanas atbalsti, apvienojot vairākas kompozīcijas -
failus, tas ļauj ignorēt dažādus parametrus otrajā failā. Piemēram:
$ 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
Šī sintakse nav ļoti ērta izstrādes laikā, kad komanda
būs jādara daudzas reizes.
Par laimi, Docker Compose automātiski meklē īpašu failu ar nosaukumu
docker-compose.override.yml lai ignorētu vērtības docker-compose.yml. Ja
pārdēvējiet otro failu, jūs saņemat to pašu rezultātu, tikai izmantojot sākotnējo komandu:
$ 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
Labi, to ir vieglāk atcerēties.
Mainīgo interpolācija
Konfigurācijas failu atbalsts
mainīgie
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...
Un ja jūs to darāt docker-compize veidot (vai push) bez vides mainīgā
$MY_SERVICE_VERSION, tiks izmantota vērtība jaunākaisbet ja iestatāt
vides mainīgā vērtība pirms būves, to izmantos būvējot vai stumjot
uz reģistru privātais.reģistrs.mans.
Mani principi
Pieejas, kas darbojas man, var noderēt arī jums. Es sekoju šiem
vienkārši noteikumi:
- Visas manas ražošanas, izstrādes (vai citas vides) skursteņi ir definēti caur
docker-compose failus - Konfigurācijas faili, kas nepieciešami, lai pēc iespējas aptvertu visas manas vides
izvairīties no dublēšanās. - Man ir nepieciešama viena vienkārša komanda darbam katrā vidē.
- Galvenā konfigurācija ir definēta failā docker-compose.yml.
- Vides mainīgie tiek izmantoti, lai definētu attēlu tagus vai citus
mainīgie, kas dažādās vidēs var atšķirties (inscenējums, integrācija,
ražošana). - Ražošanas mainīgo vērtības tiek izmantotas kā vērtības
pēc noklusējuma tas samazina riskus, ja steks tiek palaists ražošanā bez
iestatīt vides mainīgo. - Lai sāktu pakalpojumu ražošanas vidē, izmantojiet komandu docker steka izvietošana - sastādīt-fails docker-compose.yml -with-registry-auth my-steck-name.
- Darba vide tiek startēta, izmantojot komandu docker-komponēt-d.
Apskatīsim vienkāršu piemēru.
# 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
...
Es varu izmantot docker-compose (docker-compose up)lai palaistu kaudzi
izstrādes režīms ar iebūvētu pirmkodu /projekts/src.
Šos pašus failus varu izmantot ražošanā! Un es noteikti varētu izmantot
tas pats fails docker-compose.yml iestudēšanai. Lai to paplašinātu uz
ražošana, man tikai nepieciešams izveidot un nosūtīt attēlu ar iepriekš noteiktu tagu
CI stadijā:
export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push
Ražošanā to var palaist, izmantojot šādas komandas:
export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
Un, ja jūs vēlaties darīt to pašu uz skatuves, jums vienkārši ir jādefinē
nepieciešamie vides mainīgie, lai strādātu inscenēšanas vidē:
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
Rezultātā mēs izmantojām divus dažādus docker-compose failus, kuriem bez
Dublētas konfigurācijas var izmantot jebkurai jūsu videi!
Uzziniet vairāk par kursu
Avots: www.habr.com