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

Cov lus txhais ntawm podcast tau npaj ua ntej qhov kev kawm pib. "Linux Administrator"

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

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

Nrog lub advent ntawm Docker Compose v3 Cov ntaub ntawv YAML no siv tau 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 cov ntaub ntawv docker-compose tib yam hauv
cov txheej txheem kev tsim kho thiab nyob rau hauv qhov chaw tsim khoom? Los yog siv tib cov ntaub ntawv rau
Kev npaj ua ntej? Zoo, feem ntau, yog, tab sis rau qhov kev ua haujlwm no peb xav tau cov hauv qab no:

  • Kev Sib Txuas Lus Hloov Pauv: Siv Cov Kev Hloov Pauv Ib Puag Ncig rau Qee Qhov
    cov nqi uas hloov pauv hauv txhua qhov chaw ib puag ncig.
  • Kev hloov kho dua tshiab: lub peev xwm los txhais lub sijhawm thib ob (lossis ib qho twg
    lwm qhov tom qab) docker-compose cov ntaub ntawv uas yuav hloov qee yam piv txwv
    ua ntej, thiab docker compose yuav saib xyuas kev sib koom ua ke ob qho ntaub ntawv.

Qhov sib txawv ntawm cov ntaub ntawv tsim kho thiab cov ntaub ntawv tsim khoom

Thaum lub sijhawm tsim kho, koj yuav xav xyuas cov kev hloov pauv ntawm cov lej hauv
nyob rau hauv lub sijhawm tiag tiag. Rau qhov no, qhov code ntim feem ntau yog mounted nyob rau hauv
ib lub thawv uas muaj lub sijhawm khiav rau koj daim ntawv thov. Tab sis rau ib puag ncig tsim khoom
Txoj kev no tsis haum.

Hauv kev tsim khoom, koj muaj ib pawg nrog ntau lub nodes thiab lub ntim yog hauv zos los ntawm
piv rau qhov node uas koj lub thawv (lossis kev pabcuam) khiav ntawm, yog li koj tsis ua
Koj tuaj yeem mount cov code qhov twg los tau yam tsis muaj kev ua haujlwm nyuaj uas suav nrog
code synchronization, cov cim, thiab lwm yam.

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

Kev hloov pauv qhov kev teeb tsa

Xav txog qhov sib txawv thiab koj qhov kev vam khom yuav txawv hauv cov xwm txheej
kev tsim kho thiab kev tsim khoom, nws yog qhov tseeb tias peb yuav xav tau cov ntaub ntawv teeb tsa sib txawv.

Docker compose txhawb kev sib txuas cov ntaub ntawv compose sib txawv los ua ke
tau txais qhov kev teeb tsa zaum kawg. 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 lawm, docker compose txhawb kev sib txuas ntau yam compose-
cov ntaub ntawv, qhov no tso cai rau koj hloov pauv ntau yam kev teeb tsa 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

Cov syntax no tsis yooj yim heev thaum lub sijhawm tsim kho thaum cov lus txib
yuav tsum tau ua ntau zaus.

Hmoov zoo, docker compose cia li nrhiav cov ntaub ntawv tshwj xeeb hu ua
docker-compose.override.yml kom hloov pauv cov nqi docker-compose.yml. yog hais tias
Yog koj hloov lub npe ntawm cov ntaub ntawv thib ob, koj yuav tau txais tib qho txiaj ntsig, tsuas yog siv cov lus txib qub:

$ 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

Zoo, qhov ntawd ua rau nws yooj yim dua rau nco ntsoov.

Kev sib xyaw ntawm cov hloov pauv

Kev txhawb nqa cov ntaub ntawv teeb tsa kev sib txuas lus
sib txawv
thiab cov nqi tsis siv neeg. 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 koj ua li ntawd docker-compose tsim (lossis thawb) tsis muaj qhov hloov pauv ib puag ncig
$MY_SERVICE_VERSION, tus nqi yuav raug siv tseebtab sis yog tias koj nruab
tus nqi ntawm qhov hloov pauv ib puag ncig ua ntej tsim, nws yuav raug siv thaum lub sijhawm tsim lossis thawb
mus rau lub tsev kawm ntawv sau npe ntiag tug.registry.mine.

Kuv cov ntsiab cai

Cov kev qhia uas ua haujlwm rau kuv kuj yuav pab tau koj thiab. Kuv ua raws li cov no
cov cai yooj yim:

  • Tag nrho kuv cov pawg rau kev tsim khoom, kev txhim kho (lossis lwm qhov chaw) yog txhais los ntawm
    docker-compose cov ntaub ntawv.
  • Cov ntaub ntawv teeb tsa uas xav tau los npog tag nrho kuv cov chaw ib puag ncig yog raws li
    zam kev ua ob yam.
  • Kuv xav tau ib lo lus txib yooj yim kom ua haujlwm tau hauv txhua qhov chaw ib puag ncig.
  • Qhov kev teeb tsa tseem ceeb yog txhais nyob rau hauv cov ntaub ntawv docker-compose.yml.
  • Cov hloov pauv ib puag ncig yog siv los txhais cov cim duab lossis lwm yam
    cov hloov pauv uas yuav hloov pauv ntawm ib puag ncig mus rau ib puag ncig (staging, integration,
    kev tsim khoom).
  • Cov nqi ntawm cov hloov pauv rau kev tsim khoom siv ua cov nqi los ntawm
    los ntawm lub neej ntawd, qhov no txo ​​qhov kev pheej hmoo thaum khiav lub pawg hauv kev tsim khoom yam tsis muaj
    teeb tsa qhov hloov pauv ib puag ncig.
  • Txhawm rau pib qhov kev pabcuam hauv qhov chaw tsim khoom, siv cov lus txib docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Qhov chaw ua haujlwm raug 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 up)kom pib lub pawg hauv
hom kev tsim kho nrog cov lej qhov chaw tau teeb tsa rau hauv /project/src.

Kuv siv tau cov ntaub ntawv no tib yam hauv kev tsim khoom! Thiab kuv siv tau raws nraim li ntawd
cov ntaub ntawv tib yam docker-compose.yml rau kev npaj ua ntej. Txhawm rau xa qhov no mus rau
kev tsim khoom, kuv tsuas yog xav tau tsim thiab xa ib daim duab nrog lub cim npe uas tau teev tseg ua ntej
nyob rau theem CI:

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

Thaum tsim khoom, qhov no tuaj yeem khiav nrog 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 li ntawd ntawm theem, koj tsuas yog yuav tsum txhais kom meej xwb
Cov kev hloov pauv ib puag ncig tsim nyog rau kev ua haujlwm hauv qhov chaw staging:

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

Peb xaus rau siv ob cov ntaub ntawv docker-compose sib txawv, uas tsis muaj
Cov kev teeb tsa rov ua dua tuaj yeem siv rau txhua qhov ntawm koj qhov chaw ib puag ncig!

Kawm ntxiv txog chav kawm "Linux Administrator"

Tau qhov twg los: www.hab.com

Ntxiv ib saib