Docker Compose: los ntawm kev loj hlob mus rau ntau lawm

Kev txhais lus ntawm podcast transcription npaj nyob rau hauv kev cia siab ntawm qhov pib ntawm chav kawm "Linux Administrator"

Docker Compose: los ntawm kev loj hlob mus rau ntau lawm

Docker Compose yog ib qho cuab yeej zoo heev los tsim kev ua haujlwm
ib puag ncig rau pawg siv hauv koj daim ntawv thov. Nws tso cai rau koj los txhais
txhua feem ntawm koj daim ntawv thov, ua raws li qhov tseeb thiab yooj yim syntax hauv YAML-
cov ntaub ntawv
.

Nrog lub advent ntawm docker compose v3 cov ntaub ntawv YAML no tuaj yeem siv ncaj qha rau hauv qhov chaw tsim khoom thaum ua haujlwm nrog
pawg Docker swb.

Tab sis qhov no puas txhais tau tias koj tuaj yeem siv tib cov ntaub ntawv docker-compose hauv
txoj kev loj hlob thiab nyob rau hauv qhov chaw tsim khoom? Los yog siv tib cov ntaub ntawv rau
theem? Zoo, feem ntau, yog, tab sis rau qhov kev ua haujlwm no peb xav tau cov hauv qab no:

  • Kev hloov pauv hloov pauv: siv ib puag ncig hloov pauv rau qee qhov
    cov txiaj ntsig uas hloov hauv txhua qhov chaw.
  • Configuration override: muaj peev xwm los txhais qhov thib ob (lossis ib qho
    lwm qhov tom ntej) docker-compose cov ntaub ntawv uas yuav hloov qee yam hais txog
    ua ntej, thiab docker compose yuav saib xyuas kev sib koom ua ke ntawm ob cov ntaub ntawv.

Qhov sib txawv ntawm kev txhim kho thiab cov ntaub ntawv ntau lawm

Thaum lub sij hawm txoj kev loj hlob, koj yuav feem ntau yuav xav mus xyuas cov code hloov nyob rau hauv
sijhawm tiag. Ua li no, feem ntau lub ntim nrog lub hauv paus code yog mounted rau hauv
thawv uas muaj runtime rau koj daim ntawv thov. Tab sis rau ib puag ncig ntau lawm
Txoj kev no tsis haum.

Hauv kev tsim khoom, koj muaj ib pawg nrog ntau cov nodes, thiab ntim yog hauv zos
txheeb ze rau ntawm qhov uas koj lub thawv (lossis kev pabcuam) tab tom khiav, yog li koj tsis ua
koj tuaj yeem mount qhov chaws tsis muaj kev ua haujlwm nyuaj uas suav nrog
code synchronization, teeb liab, thiab lwm yam.

Hloov chaw, peb feem ntau xav tsim cov duab nrog ib qho tshwj xeeb version ntawm koj cov cai.
Nws yog kev cai los khi nws nrog lub cim tsim nyog (koj tuaj yeem siv semantic
versioning lossis lwm qhov system ntawm koj qhov kev txiav txim siab).

Configuration Override

Muab qhov sib txawv thiab koj qhov kev vam khom yuav txawv ntawm cov xwm txheej
kev txhim kho thiab kev tsim khoom, nws yog qhov tseeb tias peb yuav xav tau cov ntaub ntawv sib txawv.

Docker compose txhawb kev sib koom ua ke cov ntaub ntawv sib txawv rau
tau qhov kawg configuration. Qhov no ua haujlwm li cas tuaj yeem pom hauv qhov piv txwv:

$ 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

Raws li tau hais, docker compose txhawb kev sib koom ua ke ntau yam -
cov ntaub ntawv, qhov no tso cai rau koj override ntau yam tsis nyob rau hauv cov ntaub ntawv thib ob. Piv txwv li:

$ 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

Qhov no syntax tsis yooj yim heev thaum kev txhim kho, thaum cov lus txib
yuav tsum tau ua ntau zaus.

Luckily, docker compose cia li saib rau cov ntaub ntawv tshwj xeeb hu ua
docker-compose.override.yml mus override tus nqi docker-compose.yml. yog hais tias
rename cov ntaub ntawv thib ob, koj tau txais cov txiaj ntsig zoo ib yam, tsuas yog siv cov lus txib thawj:

$ 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, qhov ntawd yooj yim dua kom nco qab.

Interpolation ntawm Variables

Configuration ntaub ntawv txhawb nqa interpolation
sib txawv
thiab default values. Ntawd yog, koj tuaj yeem ua cov hauv qab no:

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

Thiab yog tias koj ua docker-compose tsim (los yog thawb) tsis muaj ib puag ncig hloov pauv
$MY_SERVICE_VERSION, tus nqi yuav siv tseebtab sis yog koj teem
tus nqi ntawm ib puag ncig hloov pauv ua ntej kev tsim, nws yuav siv thaum lub tsev lossis thawb
mus rau npe private.registry.mine.

Kuv txoj cai

Txoj hauv kev uas ua haujlwm rau kuv yuav ua haujlwm rau koj thiab. Kuv ua raws li cov no
cov cai yooj yim:

  • Tag nrho kuv pawg rau kev tsim khoom, kev tsim kho (lossis lwm qhov chaw) tau txhais los ntawm
    docker-compose cov ntaub ntawv
  • Cov ntaub ntawv teeb tsa xav tau los npog tag nrho kuv qhov chaw ib puag ncig, ntau li ntau tau
    zam luam tawm.
  • Kuv xav tau ib qho lus txib yooj yim los ua haujlwm hauv txhua qhov chaw.
  • Lub ntsiab configuration yog txhais nyob rau hauv cov ntaub ntawv docker-compose.yml.
  • Ib puag ncig hloov pauv tau siv los txhais cov duab cim lossis lwm yam
    kev sib txawv uas yuav txawv ntawm ib puag ncig mus rau ib puag ncig (staging, integration,
    ntau lawm).
  • Cov txiaj ntsig ntawm cov khoom sib txawv yog siv los ua qhov tseem ceeb rau
    los ntawm lub neej ntawd, qhov no txo ​​qhov kev pheej hmoo yog tias cov pawg tau pib hauv kev tsim khoom yam tsis muaj
    teem ib puag ncig hloov pauv.
  • Txhawm rau pib qhov kev pabcuam hauv qhov chaw tsim khoom, siv cov lus txib docker pawg deploy - sau-file docker-compose.yml -with-registry-auth my-stack-name.
  • Qhov chaw ua haujlwm tau pib siv cov lus txib docker-compose li -d.

Cia peb saib ib qho piv txwv yooj yim.

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

Kuv siv tau docker-compose (docker-compose li)los khiav pawg hauv
txoj kev loj hlob hom nrog qhov chaws mounted nyob rau hauv /project/src.

Kuv tuaj yeem siv cov ntaub ntawv qub no hauv kev tsim khoom! Thiab kuv yeej siv tau
tib cov ntaub ntawv docker-compose.yml rau staging. Kom nthuav qhov no mus
ntau lawm, kuv tsuas yog yuav tsum tau tsim thiab xa cov duab nrog ib tug predefined tag
ntawm CI theem:

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

Hauv kev tsim khoom, qhov no tuaj yeem khiav tau siv cov lus txib hauv qab no:

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

Thiab yog tias koj xav ua tib yam ntawm theem, koj tsuas yog yuav tsum tau txhais
tsim nyog ib puag ncig variables rau kev ua hauj lwm nyob rau hauv staging ib puag ncig:

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

Yog li ntawd, peb siv ob qhov sib txawv docker-compose cov ntaub ntawv, uas tsis muaj
Duplicate configurations tuaj yeem siv rau txhua qhov chaw koj muaj!

Kawm ntxiv txog chav kawm "Linux Administrator"

Tau qhov twg los: www.hab.com

Ntxiv ib saib