Docker Compose: ከልማት ወደ ምርት

የትምህርቱን መጀመሪያ በመጠባበቅ የተዘጋጀውን የፖድካስት ቅጂ ትርጉም "ሊኑክስ አስተዳዳሪ"

Docker Compose: ከልማት ወደ ምርት

Docker Compose ዴስክቶፕን ለመፍጠር አስደናቂ መሣሪያ ነው።
በመተግበሪያዎ ውስጥ ጥቅም ላይ ለዋለ ቁልል አካባቢ። እንዲገልጹ ያስችልዎታል
ግልጽ እና ቀላል አገባብ በመከተል እያንዳንዱ የመተግበሪያዎ አካል ያኤምኤል -
ፋይሎች
.

ከመምጣቱ ጋር ዶከር አዘጋጅ v3 እነዚህ የ YAML ፋይሎች በቀጥታ በምርት አካባቢ ውስጥ ሲሰሩ መጠቀም ይችላሉ።
ክላስተር የዶከር መንጋ.

ግን ያ ማለት ተመሳሳዩን ዶከር-አቀናብር ፋይልን መጠቀም ይችላሉ ማለት ነው።
የእድገት ሂደት እና የምርት አካባቢ? ወይም ተመሳሳይ ፋይል ለ
ዝግጅት? ደህና ፣ በአጠቃላይ ፣ አዎ ፣ ግን ለእንደዚህ ዓይነቱ ተግባር የሚከተሉትን እንፈልጋለን ።

  • ተለዋዋጭ መስተጋብር፡ ለአንዳንዶች የአካባቢ ተለዋዋጮችን መጠቀም
    በእያንዳንዱ አካባቢ የሚለወጡ እሴቶች.
  • ማዋቀር መሻር፡ ሴኮንድ (ወይም ማንኛውንም) የመግለጽ ችሎታ
    ሌላ ተከታይ) ዶከር-ማጠናቀር ፋይል ይህም በተመለከተ የሆነ ነገር ይለውጣል
    የመጀመሪያው እና ዶከር አዘጋጅ ሁለቱንም ፋይሎች በማዋሃድ ይንከባከባል።

በእድገት እና በማምረት ፋይሎች መካከል ያሉ ልዩነቶች

በግንባታው ወቅት፣ ምናልባት የኮድ ለውጦችን መፈተሽ ይፈልጋሉ
እውነተኛ ጊዜ ሁነታ. ይህንን ለማድረግ, ብዙውን ጊዜ, ከምንጩ ኮድ ጋር ያለው ድምጽ ወደ ውስጥ ይጫናል
የማመልከቻዎ የሩጫ ጊዜን የያዘ መያዣ። ግን ለምርት አካባቢ
ይህ መንገድ ተስማሚ አይደለም.

በምርት ውስጥ ባለ ብዙ መስቀለኛ መንገድ ክላስተር አለህ እና መጠኑ አካባቢያዊ ነው።
መያዣዎ (ወይም አገልግሎትዎ) እየሄደበት ካለው አስተናጋጅ አንጻር፣ ስለዚህ እርስዎ እንዳይሰሩት።
ያለ ውስብስብ ኦፕሬሽኖች የምንጭ ኮዱን መጫን ይችላሉ ፣ እነሱም ያካትታሉ
የኮድ ማመሳሰል፣ ምልክቶች፣ ወዘተ.

በምትኩ፣ እኛ ብዙውን ጊዜ ከተወሰነ የኮድዎ ስሪት ጋር ምስል መፍጠር እንፈልጋለን።
በተገቢው መለያ ምልክት ማድረግ የተለመደ ነው (ፍቺን መጠቀም ይችላሉ።
ስሪት ወይም ሌላ የመረጡት ስርዓት).

ውቅረት መሻር

ልዩነቶቹን ከግምት ውስጥ በማስገባት እና የእርስዎ ጥገኞች በሁኔታዎች ሊለያዩ ይችላሉ።
ልማት እና ምርት, የተለያዩ የውቅረት ፋይሎች እንደሚያስፈልጉን ግልጽ ነው.

Docker compose የተለያዩ የመጻፍ ፋይሎችን ወደ ማዋሃድ ይደግፋል
የመጨረሻውን ውቅር ያግኙ. እንዴት እንደሚሰራ በአንድ ምሳሌ ውስጥ ማየት ይቻላል-

$ 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

እንደተናገረው፣ ዶከር አዘጋጅ ብዙ ድርሰትን ማዋሃድ ይደግፋል-
ፋይሎች, ይህ በሁለተኛው ፋይል ውስጥ የተለያዩ አማራጮችን እንዲሽሩ ያስችልዎታል. ለምሳሌ:

$ 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

ይህ አገባብ በእድገት ሂደት ውስጥ በጣም ምቹ አይደለም, ትእዛዝ ሲሰጥ
ብዙ ጊዜ መደረግ አለበት.

እንደ እድል ሆኖ፣ docker compose የሚጠራውን ልዩ ፋይል በራስ-ሰር ይፈልጋል
ዶከር-አቀናብር.መሻር.yml እሴቶችን ለመሻር docker-compose.yml. ከሆነ
ሁለተኛውን ፋይል እንደገና ይሰይሙ, ተመሳሳይ ውጤት ያገኛሉ, የመጀመሪያውን ትዕዛዝ ብቻ ይጠቀሙ:

$ 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

እሺ፣ ያ ለማስታወስ ቀላል ነው።

ተለዋዋጭ interpolation

የማዋቀር ፋይሎች ድጋፍ ጣልቃ መግባት
ተለዋዋጮች
እና ነባሪ እሴቶች. ማለትም የሚከተሉትን ማድረግ ይችላሉ።

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

እና ካደረጋችሁ ዶከር-አቀናብር ግንባታ (ወይም መግፋት) ያለ አካባቢ ተለዋዋጭ
$MY_SERVICE_VERSION, እሴቱ ጥቅም ላይ ይውላል የቅርብ ጊዜነገር ግን ካዘጋጀህ
ከግንባታው በፊት የአከባቢው ተለዋዋጭ እሴት, በሚገነባበት ወይም በሚገፋበት ጊዜ ጥቅም ላይ ይውላል
ለመመዝገብ የግል.መዝገብ.የእኔ.

የእኔ መርሆች

ለእኔ ምቹ የሆኑ አቀራረቦች ለእርስዎ ጠቃሚ ሊሆኑ ይችላሉ. ይህንን እከተላለሁ።
ቀላል ደንቦች:

  • ለምርት ፣ ለልማት (ወይም ለሌሎች አከባቢዎች) የእኔ ቁልል በሙሉ የተገለፀው በዚህ ነው።
    ዶከር-አጻጻፍ ፋይሎች.
  • ሁሉንም አካባቢዬን ለመሸፈን የሚያስፈልጉት የማዋቀር ፋይሎች፣ ከፍተኛ.
    ማባዛትን ያስወግዱ.
  • በእያንዳንዱ አካባቢ ለመስራት አንድ ቀላል ትእዛዝ እፈልጋለሁ።
  • ዋናው ውቅር በፋይሉ ውስጥ ይገለጻል docker-compose.yml.
  • የአካባቢ ተለዋዋጮች የምስል መለያዎችን ወይም ሌላን ለመግለጽ ያገለግላሉ
    ከአካባቢ ወደ አካባቢ ሊለወጡ የሚችሉ ተለዋዋጮች (ማዘጋጀት፣ ውህደት፣
    ምርት)።
  • ለምርት የተለዋዋጮች እሴቶች እንደ እሴቶች ጥቅም ላይ ይውላሉ
    በነባሪ ፣ ይህ ያለሱ የምርት ውስጥ ቁልል ቢያካሂዱ አደጋዎችን ይቀንሳል
    የአካባቢ ተለዋዋጭ ያዘጋጁ.
  • በምርት አካባቢ ውስጥ አገልግሎት ለመጀመር ትዕዛዙን ይጠቀሙ docker stack deploy - compose-file docker-compose.yml - በመዝገብ-አውት my-stack-name.
  • የሥራ አካባቢው የሚጀምረው በትእዛዙ ነው docker-compose-d.

አንድ ቀላል ምሳሌ እንመልከት።

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

መጠቀም እችላለሁ ዶከር-አቀናብር (ዶከር-ማቀናበር)ላይ ቁልል ለማስኬድ
ውስጥ የተፈናጠጠ ምንጭ ኮድ ጋር ልማት ሁነታ /ፕሮጀክት/src.

በምርት ውስጥ ተመሳሳይ ፋይሎችን መጠቀም እችላለሁ! እና በትክክል መጠቀም እችል ነበር።
ተመሳሳይ ፋይል docker-compose.yml ለዝግጅት. ይህንን ለማስፋት
ምርት ፣ ምስሉን አስቀድሞ ከተገለጸ መለያ ጋር መገንባት እና መላክ ብቻ እፈልጋለሁ
በ CI ደረጃ;

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

በምርት ውስጥ, ይህ በሚከተሉት ትዕዛዞች ሊሰራ ይችላል.

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

እና በመድረክ ላይ ተመሳሳይ ነገር ማድረግ ከፈለጉ, መግለፅ ብቻ ያስፈልግዎታል
በዝግጅት አከባቢ ውስጥ ለመስራት አስፈላጊ የአካባቢ ተለዋዋጮች

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

በውጤቱም, ሁለት የተለያዩ ዶከር-አጻጻፍ ፋይሎችን ተጠቀምን, ያለሱ
የተባዙ ውቅሮች ለማንኛውም አካባቢዎ ጥቅም ላይ ሊውሉ ይችላሉ!

ስለ ኮርሱ የበለጠ ይረዱ "ሊኑክስ አስተዳዳሪ"

ምንጭ: hab.com

አስተያየት ያክሉ