Docker Compose: gikan sa pag-uswag hangtod sa produksiyon

Paghubad sa podcast transcription nga giandam sa pagpaabut sa pagsugod sa kurso "Linux Administrator"

Docker Compose: gikan sa pag-uswag hangtod sa produksiyon

Ang Docker Compose usa ka talagsaon nga himan alang sa paghimo og usa ka pagtrabaho
palibot alang sa stack nga gigamit sa imong aplikasyon. Kini nagtugot kanimo sa paghubit
matag bahin sa imong aplikasyon, pagsunod sa usa ka tin-aw ug yano nga syntax sa YAML-
mga file
.

Sa pag-abut sa docker compose v3 kini nga mga file sa YAML mahimong magamit direkta sa palibot sa produksiyon kung nagtrabaho
cluster Pagdugok sa Docker.

Apan nagpasabot ba kini nga mahimo nimong gamiton ang parehas nga docker-compose file sa
proseso sa pag-uswag ug sa palibot sa produksiyon? O gamita ang parehas nga file alang sa
dula? Aw, sa kinatibuk-an, oo, apan alang niini nga pag-andar kinahanglan namon ang mosunod:

  • Variable interpolation: paggamit sa environment variables alang sa pipila
    mga mithi nga nagbag-o sa matag palibot.
  • Configuration override: abilidad sa paghubit sa usa ka segundo (o bisan unsa
    laing sunod-sunod nga) docker-compose file nga mag-usab sa usa ka butang mahitungod sa
    una, ug ang docker compose mag-atiman sa paghiusa sa duha ka mga file.

Mga kalainan tali sa pag-uswag ug mga file sa produksiyon

Atol sa pag-uswag, lagmit gusto nimo nga susihon ang mga pagbag-o sa code
tinuod nga panahon. Aron mahimo kini, kasagaran ang volume nga adunay source code gi-mount
sudlanan nga adunay runtime alang sa imong aplikasyon. Apan alang sa usa ka palibot sa produksiyon
Kini nga pamaagi dili angay.

Sa produksyon, ikaw adunay usa ka cluster nga adunay daghang mga node, ug ang gidaghanon lokal
kalabot sa node diin ang imong sudlanan (o serbisyo) nagdagan, mao nga dili nimo buhaton
mahimo nimong i-mount ang source code nga walay komplikado nga mga operasyon nga naglakip
code synchronization, signal, ug uban pa.

Hinunoa, kasagaran gusto namong maghimo ug hulagway nga adunay espesipikong bersyon sa imong code.
Naandan nga markahan kini sa angay nga tag (mahimo nimong gamiton ang semantic
versioning o laing sistema sa imong pagbuot).

Pag-override sa Configuration

Gihatag ang mga kalainan ug nga ang imong mga dependency mahimong magkalainlain sa mga senaryo
pag-uswag ug produksiyon, klaro nga kinahanglan namon ang lainlaing mga file sa pag-configure.

Gisuportahan sa Docker compose ang paghiusa sa lainlaing mga compose file sa
makuha ang katapusan nga pag-configure. Kung giunsa kini paglihok makita sa pananglitan:

$ 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

Sama sa giingon, ang docker compose nagsuporta sa paghiusa sa daghang mga compose -
file, kini nagtugot kanimo sa pag-override sa lain-laing mga parameter sa ikaduhang file. Pananglitan:

$ 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

Kini nga syntax dili kaayo kombenyente sa panahon sa pag-uswag, kung ang mando
kinahanglan nga buhaton sa daghang mga higayon.

Suwerte, ang docker compose awtomatikong nangita alang sa usa ka espesyal nga file nga gitawag
docker-compose.override.yml sa pag-override sa mga mithi docker-compose.yml. Kon
usba ang ngalan sa ikaduha nga file, makuha nimo ang parehas nga resulta, gamit lamang ang orihinal nga mando:

$ 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

Okay, kana mas dali hinumdoman.

Interpolation sa mga Variable

Pagsuporta sa mga file sa pag-configure interpolation
mga variable
ug default nga mga bili. Sa ato pa, mahimo nimo ang mosunod:

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

Ug kung buhaton nimo docker-compose pagtukod (o pagduso) walay environment variable
$MY_SERVICE_VERSION, ang bili gamiton pinaka-ulahingpero kung imong set
ang bili sa environment variable sa wala pa ang pagtukod, kini gamiton sa pagtukod o pagduso
sa rehistro private.registry.mine.

Akong mga prinsipyo

Ang mga pamaagi nga mohaum kanako mahimo usab nga magamit kanimo. Gisunod nako kini
simple nga mga lagda:

  • Ang tanan nakong mga stack alang sa produksyon, kalamboan (o uban pang mga palibot) gihubit pinaagi sa
    docker-compose nga mga file
  • Ang mga file sa pag-configure gikinahanglan aron matabonan ang tanan nakong palibot, kutob sa mahimo
    likayi ang pagdoble.
  • Nagkinahanglan ko og usa ka yano nga sugo aron magtrabaho sa matag palibot.
  • Ang nag-unang configuration gihubit sa file docker-compose.yml.
  • Ang mga variable sa kalikopan gigamit aron mahibal-an ang mga tag sa imahe o uban pa
    mga baryable nga mahimong magkalahi gikan sa palibot ngadto sa palibot (staging, integration,
    produksyon).
  • Ang mga kantidad sa mga variable sa produksiyon gigamit ingon mga kantidad alang sa
    pinaagi sa default, kini makapakunhod sa mga risgo kon ang stack gilunsad sa produksyon nga wala
    set environment variable.
  • Aron magsugod sa usa ka serbisyo sa usa ka palibot sa produksiyon, gamita ang mando pag-deploy sa docker stack - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Ang palibot sa pagtrabaho nagsugod gamit ang mando docker-compose up -d.

Atong tan-awon ang usa ka yano nga pananglitan.

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

magamit nako docker-compose (docker-compose up)sa pagpadagan sa stack sa
development mode nga adunay source code nga naka-mount /proyekto/src.

Magamit nako kining parehas nga mga file sa produksiyon! Ug magamit gyud nako
parehas nga file docker-compose.yml alang sa dula. Aron mapalapad kini sa
produksyon, kinahanglan ko lang nga magtukod ug ipadala ang imahe nga adunay gitakda nga tag
sa yugto sa CI:

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

Sa produksiyon, kini mahimong ipadagan gamit ang mosunod nga mga sugo:

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

Ug kung gusto nimo nga buhaton ang parehas sa entablado, kinahanglan nimo nga ipasabut
kinahanglan nga mga variable sa palibot alang sa pagtrabaho sa palibot sa dula:

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

Ingon usa ka sangputanan, gigamit namon ang duha ka lainlaing docker-compose nga mga file, nga wala
Ang mga duplicate nga mga pag-configure mahimong magamit alang sa bisan unsang palibot nga naa kanimo!

Pagkat-on og dugang mahitungod sa kurso "Linux Administrator"

Source: www.habr.com

Idugang sa usa ka comment