Docker Compose: lati idagbasoke si iṣelọpọ

Itumọ itumọ adarọ-ese ti a pese sile ni ifojusona ti ibẹrẹ iṣẹ-ẹkọ naa "Alakoso Linux"

Docker Compose: lati idagbasoke si iṣelọpọ

Docker Compose jẹ ohun elo iyalẹnu fun ṣiṣẹda iṣẹ kan
ayika fun akopọ ti a lo ninu ohun elo rẹ. O faye gba o lati setumo
paati kọọkan ti ohun elo rẹ, ni atẹle sintasi mimọ ati irọrun ninu YAML-
awọn faili
.

Pẹlu awọn dide ti docker kọ v3 awọn faili YAML wọnyi le ṣee lo taara ni agbegbe iṣelọpọ nigba ṣiṣẹ pẹlu
iṣupọ Docker fọn.

Ṣugbọn eyi tumọ si pe o le lo faili docker-compose kanna ni
ilana idagbasoke ati ni agbegbe iṣelọpọ? Tabi lo faili kanna fun
iṣeto? O dara, ni gbogbogbo, bẹẹni, ṣugbọn fun iṣẹ ṣiṣe yii a nilo atẹle naa:

  • Ayipada interpolation: lilo awọn oniyipada ayika fun diẹ ninu awọn
    awọn iye ti o yipada ni agbegbe kọọkan.
  • Iṣeto ni idojuk: agbara lati ṣalaye iṣẹju-aaya (tabi eyikeyi
    miiran ti o tẹle) faili docker-compose ti yoo yi nkan pada nipa
    akọkọ, ati docker compose yoo ṣe abojuto apapọ awọn faili mejeeji.

Awọn iyatọ laarin idagbasoke ati awọn faili iṣelọpọ

Lakoko idagbasoke, o ṣeese yoo fẹ lati ṣayẹwo awọn iyipada koodu ninu
akoko gidi. Lati ṣe eyi, nigbagbogbo iwọn didun pẹlu koodu orisun ti gbe sinu
eiyan ti o ni awọn akoko asiko isise fun ohun elo rẹ. Ṣugbọn fun agbegbe iṣelọpọ
Ọna yii ko dara.

Ni iṣelọpọ, o ni iṣupọ pẹlu ọpọlọpọ awọn apa, ati iwọn didun jẹ agbegbe
ojulumo si ipade lori eyi ti rẹ eiyan (tabi iṣẹ) nṣiṣẹ, ki o ko
o le gbe koodu orisun laisi awọn iṣẹ ṣiṣe eka ti o pẹlu
amuṣiṣẹpọ koodu, awọn ifihan agbara, ati bẹbẹ lọ.

Dipo, a nigbagbogbo fẹ lati ṣẹda aworan kan pẹlu ẹya kan pato ti koodu rẹ.
O jẹ aṣa lati samisi pẹlu aami ti o yẹ (o le lo itumọ-ọrọ
ti ikede tabi eto miiran ni lakaye rẹ).

Iṣeto ni idojuk

Fi fun awọn iyatọ ati pe awọn igbẹkẹle rẹ le yatọ ni awọn oju iṣẹlẹ
idagbasoke ati iṣelọpọ, o han gbangba pe a yoo nilo awọn faili iṣeto ni oriṣiriṣi.

Docker ṣajọ ṣe atilẹyin iṣakojọpọ awọn faili akojọpọ oriṣiriṣi si
gba ik iṣeto ni. Bii eyi ṣe n ṣiṣẹ ni a le rii ninu apẹẹrẹ:

$ 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

Gẹgẹbi a ti sọ, docker ṣajọ awọn atilẹyin apapọ ọpọlọpọ awọn akopọ -
awọn faili, eyi ngbanilaaye lati fagilee ọpọlọpọ awọn paramita ninu faili keji. Fun apere:

$ 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

Sintasi yii ko rọrun pupọ lakoko idagbasoke, nigbati aṣẹ naa
yoo nilo lati ṣee ṣe ni ọpọlọpọ igba.

Ni Oriire, docker compose laifọwọyi n wa faili pataki kan ti a pe
docker-compose.override.yml lati idojuk awọn iye docker-compose.yml... Ti o ba ti a
tun lorukọ faili keji, o gba abajade kanna, lilo aṣẹ atilẹba nikan:

$ 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

O dara, iyẹn rọrun lati ranti.

Interpolation ti Oniyipada

Awọn faili iṣeto ni atilẹyin interpolation
oniyipada
ati aiyipada iye. Iyẹn ni, o le ṣe awọn atẹle:

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

Ati pe ti o ba ṣe docker-kọ kọ (tabi titari) lai oniyipada ayika
$MY_SERVICE_VERSION, iye yoo ṣee lo titunṣugbọn ti o ba ṣeto
iye oniyipada ayika ṣaaju ki o to kọ, yoo ṣee lo nigbati o ba kọ tabi titari
si iforukọsilẹ ikọkọ.registry.mi.

Awọn ilana mi

Awọn ọna ti o ṣiṣẹ fun mi le ṣiṣẹ fun ọ paapaa. Mo tẹle awọn wọnyi
Awọn ofin ti o rọrun:

  • Gbogbo awọn akopọ mi fun iṣelọpọ, idagbasoke (tabi awọn agbegbe miiran) ni asọye nipasẹ
    docker-kọ awọn faili
  • Awọn faili atunto nilo lati bo gbogbo awọn agbegbe mi, bi o ti ṣee ṣe
    yago fun išẹpo.
  • Mo nilo aṣẹ kan ti o rọrun lati ṣiṣẹ ni agbegbe kọọkan.
  • Iṣeto akọkọ jẹ asọye ninu faili naa docker-compose.yml.
  • Awọn oniyipada ayika ni a lo lati ṣalaye awọn afi aworan tabi omiiran
    awọn oniyipada ti o le yatọ lati agbegbe si agbegbe (ipese, isọpọ,
    iṣelọpọ).
  • Awọn iye ti awọn oniyipada iṣelọpọ ni a lo bi awọn iye fun
    nipa aiyipada, yi minimizes awọn ewu ti o ba ti akopọ ti wa ni se igbekale ni gbóògì lai
    ṣeto ayika oniyipada.
  • Lati bẹrẹ iṣẹ kan ni agbegbe iṣelọpọ, lo aṣẹ naa docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Ayika iṣẹ bẹrẹ ni lilo aṣẹ naa docker-ṣajọ soke -d.

Jẹ ki a wo apẹẹrẹ ti o rọrun.

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

Mo le lo docker-compose (docker-compose soke)lati ṣiṣe awọn akopọ ni
ipo idagbasoke pẹlu koodu orisun ti a gbe sinu /ise agbese/src.

Mo le lo awọn faili kanna ni iṣelọpọ! Ati pe Mo le dajudaju lo
kanna faili docker-compose.yml fun iṣeto. Lati faagun eyi si
gbóògì, Mo ti o kan nilo a Kọ ki o si fi awọn aworan pẹlu kan telẹ tag
ni ipele CI:

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

Ni iṣelọpọ, eyi le ṣee ṣiṣẹ nipa lilo awọn aṣẹ wọnyi:

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

Ati pe ti o ba fẹ ṣe kanna lori ipele, o kan nilo lati ṣalaye
awọn oniyipada ayika ti o yẹ fun ṣiṣẹ ni agbegbe iṣeto:

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

Bi abajade, a lo awọn faili oriṣiriṣi meji docker-compose, eyiti laisi
Awọn atunto pidánpidán le ṣee lo fun eyikeyi agbegbe ti o ni!

Kọ ẹkọ diẹ sii nipa ẹkọ naa "Alakoso Linux"

orisun: www.habr.com

Fi ọrọìwòye kun