Docker Compose: od razvoja do proizvodnje

Prijevod transkripcije podcasta pripremljen uoči početka tečaja "Linux administrator"

Docker Compose: od razvoja do proizvodnje

Docker Compose je nevjerojatan alat za stvaranje radnog
okruženje za stog koji se koristi u vašoj aplikaciji. Omogućuje vam definiranje
svaku komponentu vaše aplikacije, slijedeći jasnu i jednostavnu sintaksu YAML-
datoteke
.

S pojavom docker compose v3 ove YAML datoteke mogu se koristiti izravno u proizvodnom okruženju kada se radi s njima
Klastera Docker Roj.

Ali znači li to da možete koristiti istu docker-compose datoteku u
razvojnom procesu iu proizvodnom okruženju? Ili upotrijebite istu datoteku za
uprizorenje? Pa, općenito, da, ali za ovu funkcionalnost potrebno nam je sljedeće:

  • Interpolacija varijable: korištenje varijabli okruženja za neke
    vrijednosti koje se mijenjaju u svakom okruženju.
  • Nadjačavanje konfiguracije: mogućnost definiranja drugog (ili bilo kojeg
    još jedna naknadna) docker-compose datoteka koja će promijeniti nešto u vezi
    prvo, a docker compose će se pobrinuti za spajanje obje datoteke.

Razlike između razvojnih i proizvodnih datoteka

Tijekom razvoja najvjerojatnije ćete htjeti provjeriti promjene koda
stvarno vrijeme. Da biste to učinili, obično se montira volumen s izvornim kodom
spremnik koji sadrži vrijeme izvođenja za vašu aplikaciju. Ali za proizvodno okruženje
Ova metoda nije prikladna.

U proizvodnji imate klaster s mnogo čvorova, a volumen je lokalni
u odnosu na čvor na kojem se izvodi vaš spremnik (ili usluga), tako da ne
možete montirati izvorni kod bez složenih operacija koje uključuju
sinkronizacija koda, signali itd.

Umjesto toga, obično želimo stvoriti sliku s određenom verzijom vašeg koda.
Uobičajeno je označiti ga odgovarajućom oznakom (možete koristiti semantičku
stvaranje verzija ili neki drugi sustav prema vlastitom nahođenju).

Nadjačavanje konfiguracije

S obzirom na razlike i da se vaše ovisnosti mogu razlikovati u scenarijima
razvoj i proizvodnju, jasno je da će nam trebati različite konfiguracijske datoteke.

Docker compose podržava spajanje različitih datoteka za sastavljanje u
dobiti konačnu konfiguraciju. Kako to funkcionira može se vidjeti na primjeru:

$ 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

Kao što je rečeno, docker compose podržava kombiniranje više kompose -
datoteke, to vam omogućuje nadjačavanje različitih parametara u drugoj datoteci. Na primjer:

$ 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

Ova sintaksa nije baš zgodna tijekom razvoja, kada naredba
morat će se učiniti mnogo puta.

Srećom, docker compose automatski traži posebnu datoteku pod nazivom
docker-compose.override.yml za nadjačavanje vrijednosti doker-compose.yml, ako
preimenujte drugu datoteku, dobit ćete isti rezultat, samo koristeći originalnu naredbu:

$ 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

U redu, to je lakše zapamtiti.

Interpolacija varijabli

Podrška za konfiguracijske datoteke interpolacija
varijable
i zadane vrijednosti. Odnosno, možete učiniti sljedeće:

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

A ako to učinite docker-compose build (ili push) bez varijable okoline
$MY_SERVICE_VERSION, koristit će se vrijednost zadnjiali ako postavite
vrijednost varijable okruženja prije izgradnje, koristit će se prilikom izgradnje ili guranja
u registar privatni.registar.rudnik.

Moji principi

Pristupi koji meni odgovaraju mogu odgovarati i vama. Pratim ove
jednostavna pravila:

  • Svi moji skupovi za proizvodnju, razvoj (ili druga okruženja) definirani su putem
    docker-sastaviti datoteke
  • Konfiguracijske datoteke potrebne za pokrivanje svih mojih okruženja, što je više moguće
    izbjegavati dupliciranje.
  • Trebam jednu jednostavnu naredbu za rad u svakom okruženju.
  • Glavna konfiguracija definirana je u datoteci doker-compose.yml.
  • Varijable okoline koriste se za definiranje oznaka slika ili drugog
    varijable koje se mogu razlikovati od okruženja do okruženja (postavljanje, integracija,
    proizvodnja).
  • Vrijednosti proizvodnih varijabli koriste se kao vrijednosti za
    prema zadanim postavkama, ovo minimizira rizike ako se stog pokrene u proizvodnji bez
    postaviti varijablu okruženja.
  • Za pokretanje usluge u produkcijskom okruženju upotrijebite naredbu implementacija docker stack - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Radno okruženje pokreće se naredbom sastavljač-sastavlja.

Pogledajmo jednostavan primjer.

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

mogu koristiti docker-compose (docker-compose up)pokrenuti hrpu
razvojni način s montiranim izvornim kodom /projekt/src.

Mogu koristiti te iste datoteke u proizvodnji! I definitivno bih mogao koristiti
ista datoteka doker-compose.yml za uprizorenje. Da proširim ovo na
proizvodnje, samo trebam izraditi i poslati sliku s unaprijed definiranom oznakom
u fazi CI:

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

U proizvodnji se to može pokrenuti pomoću sljedećih naredbi:

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

A ako to isto želite učiniti na pozornici, samo se trebate definirati
potrebne varijable okruženja za rad u prizornom okruženju:

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

Kao rezultat toga, upotrijebili smo dvije različite docker-compose datoteke, koje bez
Dvostruke konfiguracije mogu se koristiti za bilo koje okruženje koje imate!

Saznajte više o tečaju "Linux administrator"

Izvor: www.habr.com

Dodajte komentar