- I-Docker Compose ikuvumela ukuthi uchaze futhi uhlele izinhlelo zokusebenza ezinamakhonteyina amaningi usebenzisa ifayela le-YAML, okwenza kube lula ukuthunyelwa okuyinkimbinkimbi.
- Izinsizakalo, amanethiwekhi, kanye namavolumu kuchazwa ngendlela ecacile, okwenza kube lula ukuqhubeka kwedatha kanye nokuxhumana kwangaphakathi okuphephile.
- Imiyalo njengokuphezulu, phansi, izingodo, ukuphatha kanye nokwakha kuhlanganisa umjikelezo wokuphila wamaphrojekthi aphethwe nge-Compose.
- Ifayela elilodwa le-docker-compose.yml lenza ukuthunyelwa kuphinde kukhiqizwe kokubili endaweni kanye nakumaseva amafu noma i-VPS ephethwe nge-console noma i-Portainer.
Ukusebenza ngeziqukathi sekuyinto evamile cishe kuwo wonke amaqembu okuthuthukisa, futhi lapho uhlelo lokusebenza ludlula isevisi elula futhi luqala ukufaka isizindalwazi, i-cache, i-frontend, kanye nezinye izinsizakalo ezincane, ukuphatha konke lokho ngesandla kuba yikhanda elibuhlungu langempela. Yilapho i-Docker Compose ingena khona, ithuluzi eliklanywe ngokunembile ukuze ungadingi ukuqala isiqukathi ngasinye ngokwaso, ulungiselele amanethiwekhi ngesandla, noma ukhumbule yonke imiyalo emide.
Umgomo walesi sihloko ukuthi ufunde ukuthi ungawasebenzisa kanjani ama-application aphelele nge-Docker Compose , kokubili endaweni kanye nakumaseva, ngokuqonda ngokugcwele ukuthi ingxenye ngayinye yefayela le-docker-compose.yml isebenza kanjani, ukuthi izinsizakalo, amavolumu, kanye namanethiwekhi asebenza kanjani, ukuthi yimiphi imiyalo oyidingayo emsebenzini wakho wansuku zonke, nokuthi konke lokhu kuhambisana kanjani nomongo wezwe langempela nohlelo lokusebenza lwe-Node.js kanye nedathabheyisi. Uma uvela ekuthuthukisweni okumsulwa (i-frontend, iselula, i-backend) kanye nemibono efana nokuhlelwa noma imisebenzi izwakala sengathi i-gibberish, ungakhathazeki: sizohamba igxathu negxathu, kodwa ngaphandle kokweqa imininingwane.
Izidingo eziyisisekelo zemvelo
Ngaphambi kokuthi siqale ukusebenzisa noma yini, udinga uhlelo lwesisekelo olungalungiselelwanga kahle . Indawo evamile, evame ukusetshenziswa emisebenzini kanye namaphrojekthi amancane okukhiqiza, ingase ibukeke kanje:
- Ubuntu 20.04 njengohlelo lokusebenza lweseva noma umshini wendawo.
- I-Docker 20.10.x ifakiwe futhi iyasebenza (i-daemon iyasebenza).
- I-Docker Compose 1.29.x noma ngaphezulu ukuphatha amaphrojekthi anamakhonteyina amaningi.
- I-Node.js 18.x y I-NPM 8.x uma uzokwakha izithombe kusuka kuhlelo lokusebenza lwe-Node.
Akuphoqelekile ukusebenzisa lezi zinguqulo eziqondile , kodwa ukuba nokuthile okufanayo nokusha kakhulu kuyanconywa. Kumaseva amafu afana ne-VPS ( i-Google Cloud, i-AWS, i-Arsys, njll.), umkhuba ojwayelekile ukusetha i -Linux VM , ukufaka i-Docker, bese ufaka i-Docker Compose phezu kwalokho.
Iyini i-Docker futhi ixazulula ini i-Docker Compose?

I-Docker iyipulatifomu yokupakisha nokusebenzisa izinhlelo zokusebenza ezitsheni ezihlukanisiwe . Isitsha ngasinye sihlanganisa kuphela lokho okudingekayo ukuze kuqhutshwe inqubo yakho (ama-binary, amalabhulali, isikhathi sokusebenza, njll.), ukwabelana nge-kernel ne-host kodwa ngaphandle kokuphazamisa ezinye izinsizakalo. Isusa inkinga yakudala ethi "isebenza emshinini wami" futhi ikuvumela ukuthi uhambise uhlelo lwakho lokusebenza phakathi kwemishini ehlukene ngaphandle kokuphazamiseka.
Ngakolunye uhlangothi, i-Docker Compose iyithuluzi elihlela izitsha eziningi njengokungathi ziyi-application eyodwa . Uma unesevisi elula kuphela, ubungaphatha nge-docker run, kodwa ngokushesha nje lapho udinga:
- Un ngaphambili (I-Angular, i-React, i-Vue…)
- Un i-backend (I-Node.js, i-Java, i-Python…)
- Una database (MySQL, PostgreSQL, MongoDB…)
- Mhlawumbe uhlelo lwe-cache Uhlobo lwe-Redis
Ukuphatha konke lokhu okuqukethe ngesitsha kuba yinto engasebenzi . Ukubhala kukuvumela ukuthi uchaze "isitaki" sonke kufayela elilodwa le-YAML, usho ukuthi yiziphi izinsizakalo ezikhona, ukuthi zixhuma kanjani, yiziphi izimbobo ezizivezayo, yiziphi ivolumu ezizisebenzisayo, nokuthi yiziphi iziguquguquko zemvelo abazidingayo.
Lelo fayela livame ukubizwa ngokuthi i-docker-compose.yml , yize lingabizwa ngokuthile okunye uma ulichaza nge--f lapho usebenzisa imiyalo. Lisebenza njengeresiphi: noma ubani one-Docker kanye ne-Docker Compose angaphinda ingqalasizinda efanayo yesitsha emshinini noma kuseva yakhe.
Ukufaka i-Docker Compose ezinhlelweni ezahlukene

Okuwukuphela kwesidingo sokufaka i-Docker Compose ukuthi i-Docker isebenze . Ukusuka lapho, inqubo iyahlukahluka kancane kuye ngohlelo lokusebenza:
Ukufakwa ku-Linux (isibonelo Ubuntu)
Ekusabalalisweni okufana ne-Ubuntu, ungafaka i-Docker Compose ngokulanda i-binary esemthethweni bese uyinika izimvume zokusebenzisa. Iphethini ejwayelekile yile:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Uma lokhu sekuqediwe, sebenzisa i-docker-compose --version ukuqinisekisa ukuthi umyalo uyatholakala futhi uphendula ngenguqulo efanele.
Ukufaka ku-macOS
Ku -Mac, indlela elula ngokuvamile ukufaka i-Docker Desktop , esevele ifaka i-Docker Engine kanye ne-Docker Compose. Ngaphandle kwalokho, onjiniyela abaningi basebenzisa i-Homebrew.
brew install docker-compose
Nge-Docker Desktop ngeke usakhathazeka ngezinto ezibhaliwe , ngoba iphakheji ngokwayo inakekela ukuyigcina isesikhathini kanye nenjini ye-Docker.
Ukufaka ku-Windows
Ku -Windows, inketho ewusizo kakhulu ukusebenzisa i-Docker Desktop ye-Windows . Landa isifaki kuwebhusayithi esemthethweni ye-Docker, uyiqalise, bese ulandela i-wizard. Lokhu kuzokwenza i-Docker ne-Compose zilungele kokubili ku -PowerShell noma ku-WSL2.
Nakuba i-Docker ingasetshenziswa ngokomdabu ku-Windows , ezindaweni zokuthuthukiswa ezingathi sína ngokuvamile kunconywa ukusebenzisa i-WSL2 nge-distro ye-Linux noma ngqo i-Linux VM ekude, lapho i-Docker ne-Compose zisebenza eduze kokukhiqiza.
Isakhiwo esiyisisekelo se-docker-compose.yml

Ngaphakathi kwefayela le-docker-compose.yml, singachaza amabhlogo amaningana amakhulu : inguqulo yefomethi, amasevisi, amavolumu, amanethiwekhi, futhi, kwezinye izimo, ukucushwa okwengeziwe. Amasevisi abalulekile ekusetshenzisweni kohlelo lokusebenza olujwayelekile, futhi amavolumu namanethiwekhi abalulekile uma udinga ukuphikelela.
Izinsizakalo: inhliziyo yohlelo lokusebenza
Isevisi ngayinye kufayela Lokubhala ivame ukufana nesitsha (noma iqembu lezitsha) elihlinzeka ngocezu lohlelo lokusebenza . Isibonelo, isevisi yewebhu, isevisi yedathabheyisi, isevisi yokulondoloza isikhashana, njll. Incazelo yesevisi ngayinye isekela inani lezakhiwo, okuhlanganisa:
- isithombe: Isithombe se-Docker esizosetshenziselwa isitsha (isibonelo, nginx:latest, postgres:15, node:18…).
- igama_lesitsha: Igama lesitsha elicacile (ongakukhetha; uma lingachazwanga, ukuqamba kudala elilodwa).
- ukwakha: indlela eya kufolda lapho i-Dockerfile itholakala khona ukuze kwakhiwe isithombe uma singekho noma sifuna esenzelwe wena.
- umyalo: umyalo ozokwenziwa lapho isitsha siqala (ubhala ngaphezulu kwe I-CMD (kusukela esithombeni).
- emachwebeni: imephu yembobo ngefomethi ye-host:container, isibonelo "80:80" noma "3030:3030".
- imiqulu: izikhonkwane zevolumu (eziqanjwe ngamavolumu, izikhonkwane zokubopha, njll.).
- imvelo: izinguquko zemvelo ezifakwa esitsheni.
- Incike kakhulu kwi: kubonisa ukuncika phakathi kwezinsizakalo, ukuze ezinye ziqale ngaphambi kwezinye.
- amanethiwekhiAmanethiwekhi e-Docker lapho isevisi ixhuma khona.
- Qala kabusha: inqubomgomo yokuqalisa kabusha (cha, njalo, uma yehluleka, ngaphandle kokuthi imiswe).
Into ethakazelisayo ukuthi eziningi zalezi zakhiwo zingakhethwa . Ungachaza isevisi usebenzisa `isithombe` kuphela, futhi i-Compose izokwazi kakade ukuqala isitsha ngamanani azenzakalelayo. Ngemuva kwalokho, njengoba kudingeka, ungalungisa kahle ama-port, amanethiwekhi, iziguquguquko, njll.
Amavolumu: Ukuqhubeka kwedatha nokwabelana
Amavolumu ku-Docker ayindlela ejwayelekile yokuqhubeka kwedatha nokwabelana ngayo phakathi kweziqukathi noma ne-host . Ku-Compose, ngokuvamile amenyezelwa esigabeni "samavolumu" ezingeni lempande bese ebhekiselwa kumasevisi.
Ivolumu ingaba nezakhiwo eziningana ezifanele :
- Umshayeli: uhlobo lomshayeli wevolumu (okuzenzakalelayo, okwendawo).
- izinketho_zomshayeli: izinketho ezithile zomshayeli, lapho ungacacisa khona:
- uhlobo: uhlobo lwevolumu ("ivolumu", "bopha", "nfs", njll.).
- idivayisi: indlela ku-Host ofuna ukuyikhweza, uma kwenzeka i-bind mount.
- o: izinketho zokufaka (rw, ro, njll.).
- zangaphandle: uma ivolumu iphathwa ngaphandle (akudaliwe yi-Compose).
- amalebula: amalebula angahleliwe.
- Igama: igama levolumu, uma ufuna ukulenza ngokwezifiso.
- ububanzi: ububanzi bevolumu (ngokuvamile bendawo).
Nakuba ungalungiselela imininingwane eminingi, ezimweni eziningi kwanele ukumemezela igama levolumu bese ulisebenzisa kusevisi. Isibonelo, kusizindalwazi se-MySQL noma se-PostgreSQL, kuvamile ukuba nevolumu yedatha futhi, ngezinye izikhathi, i-bind mount yezikripthi zokuqalisa.
Amanethiwekhi: ukuxhumana phakathi kweziqukathi
Uma uhlelo lokusebenza lunamamojula amaningi, kuvamile ukufuna ukuhlukanisa ithrafikhi yalo kunethiwekhi yangaphakathi ukuze i-frontend ne-backend, noma i-backend ne-database, zikwazi ukubonana kuphela futhi zingavezwa ngokungalawuleki kumphathi.
I-Docker isebenzisa amanethiwekhi ngemodeli ephefumulelwe ngezingqimba ezintathu :
- Isiphetho: isikhombikubona esibonakalayo esixhumanisa isitsha nenethiwekhi.
- I-Sandbox: isikhala senethiwekhi esihlukanisiwe sesitsha (isitaki saso se-TCP/IP).
- Network: inethiwekhi exhumanisa ama-sandbox ahlukene ngama-endpoints.
Phakathi kwabashayeli benethiwekhi abavame kakhulu ku-Docker sinabo :
| Driver | I-ambit | Descripción |
|---|---|---|
| bridge | Local | Kuyinethiwekhi ezenzakalelayo kuma-Docker host amaningi, okudala ibhuloho elibonakalayo ku-host futhi kuxhumanisa izitsha komunye nomunye. |
| Bamba | Local | Khubaza ukuhlukaniswa kwenethiwekhi: isitsha sabelana ngenethiwekhi yomsingathi ngqo. |
| ukuguqa | Global | Ikuvumela ukuthi uxhume izitsha ezisebenza kuma-Docker host ahlukene ngaphakathi kweqembu. |
| i-macvlan | Global | Nikeza ikheli le-MAC esitsheni njengokungathi liyidivayisi ebonakalayo kunethiwekhi. |
| none | Local | Ngaphandle kokuxhumeka kwenethiwekhi okulawulwa yi-Docker, ezimweni ezithile kakhulu. |
Ku-Compose, amanethiwekhi achazwa esigabeni "samanethiwekhi" , lapho ukhetha khona umshayeli kanye nezinketho. Uma ungachazi lutho, inethiwekhi yebhuloho ivame ukusetshenziswa ngokuzenzakalelayo. Amasevisi axhuma kula manethiwekhi ngokumane abhale igama encazelweni yawo.
Isibonelo esilula: nginx kanye ne-PostgreSQL ene-Docker Compose

Ukuze ubonise le mibono, cabanga ukuthi ufuna ukusetha iwebhusayithi elula nge-Nginx kanye nesizindalwazi se-PostgreSQL . Isibonelo esincane se-docker-compose.yml singase sibe nezinsizakalo ezimbili, inethiwekhi yangaphakathi, kanye namavolumu ambalwa:
version: '3.8'
services:
web:
image: nginx:latest
container_name: mi_nginx
ports:
- "80:80"
depends_on:
- db
networks:
- app_net
db:
image: postgres:latest
container_name: mi_postgres
environment:
POSTGRES_PASSWORD: ejemplo_password
volumes:
- datos_db:/var/lib/postgresql/data
networks:
- app_net
volumes:
datos_db:
networks:
app_net:
driver: bridge
Lapha sibona izinto ezimbili ezibaluleke kakhulu : okokuqala, ukuthi i-Nginx iveza i-port 80 kumphathi ngenkathi i-database ifinyeleleka kuphela ngaphakathi kwenethiwekhi ye-app_net, futhi okwesibili, ukuthi idatha ye-PostgreSQL iqhubeka kuvolumu ebizwa ngokuthi i-datos_db. Ngaphezu kwalokho, i-web incike ku-db, ngakho-ke i-Compose izozama ukuqala i-database kuqala.
Ukuncika phakathi kwezinsizakalo ezine-depends_on
Kuhlelo lokusebenza lwangempela, kuvame ukuba nobudlelwano lapho "le nsizakalo ingenamsebenzi ngaphandle kwaleyo ." Isibonelo, i-REST API edinga ukuthi isizindalwazi sisebenze ukuze kuqalwe ukuxhumana, noma i-frontend eqala kuphela lapho i-backend iphendula.
Ku-Docker Compose ungaveza lobu budlelwano ngokhiye depends_on , ubhale izinsizakalo ezincike kuzo le yamanje:
services:
api:
image: mi_usuario/mi_api:latest
depends_on:
- db
db:
image: postgres:15
Ngale ndlela yokucushwa, uma usebenzisa i-`docker-compose up` ngaphandle kokucacisa izinsizakalo , i-Compose izoqala isizindalwazi kuqala, bese kuba yi-API. Nokho, khumbula ukuthi i-`depends_on` ilawula i -oda lokuqalisa , kodwa ayiqinisekisi ukuthi isevisi encike kuyo isivele "ilungile" (isibonelo, ukuthi isizindalwazi siyamukela ukuxhumana). Ezimweni ezibucayi, izikripthi zokulinda noma ukuhlolwa kwezempilo zivame ukusetshenziswa.
I-Essential Docker Compose Commands
Uma usunefayela lakho le-docker-compose.yml endaweni yalo , ukusetshenziswa kwansuku zonke kwe-Compose kuzungeza imiyalo embalwa ebalulekile. Sizohlala sicabanga ukuthi useluhlwini lapho ifayela litholakala khona, noma ukuthi usebenzisa inketho ethi -f ukukhombisa lokhu.
Qala uhlelo lokusebenza: docker-compose up
Umyalo oyinhloko wokusebenzisa izitsha uthi `docker-compose up` . Uma uyisebenzisa ngaphandle kwamanye amapharamitha, izozama ukwakha izithombe ezidingekayo (uma zinesigaba `sokwakha`) bese iqala zonke izinsizakalo ezichaziwe.
docker-compose up
Uma ufuna ukuthi izitsha zisebenze ngemuva , njengoba kujwayelekile kumaseva, engeza i--d:
docker-compose up -d
Misa iziqukathi: docker-compose down
Ukumisa nokususa izitsha zephrojekthi (yize kungeyona ngempela izithombe noma amavolumu) oyisebenzisayo:
docker-compose down
Ungahlanganisa lo myalo nezinketho ezengeziwe uma ufuna futhi ukususa amavolumu, amanethiwekhi enziwe ngokwezifiso, njll., kodwa ezimweni eziningi, ukusebenzisa nje i-`down` kwanele ukumisa iphrojekthi ngendlela ehlelekile.
Buka isimo sezinsizakalo: docker-compose ps
Uma udinga ukuhlola ukuthi yiziphi izinsizakalo ezisebenzayo, ukuthi imaphi amachweba abekwe kuwo, kanye ne- status yawo , umyalo okufanele uwusebenzise uthi:
docker-compose ps
Lokhu kuzokukhombisa ithebula elineziqukathi eziphethwe yileyo Compose , kufaka phakathi amakholomu egama, isithombe, amachweba, kanye nesimo samanje, okuwusizo kakhulu ekuqinisekiseni ukuthi konke kunjengoba kulindelekile.
Amalogi ombuzo: amalogi okubhala nge-docker
Ukuze ubone ukuthi kwenzekani ngaphakathi kwezinsizakalo zakho, ungasebenzisa i-`docker-compose logs` . Ungabuka amalogi azo zonke izinsizakalo noma aqondene ngqo.
docker-compose logs
# Sólo los logs del servicio "api"
docker-compose logs api
Uma wengeza inketho ethi -f , uzolandelela ngesikhathi sangempela (okufana no-tail -f):
docker-compose logs -f api
Ukufaka isitsha: docker-compose exec
Uma udinga "ukungena ngaphakathi" kwesitsha ukuze ulungise noma usebenzise imiyalo , usebenzisa i-`docker-compose exec`. Isibonelo, ukuvula igobolondo kusevisi ebizwa ngokuthi i-`api`:
docker-compose exec api sh
Ezitsheni ezisuselwe ekusakazweni kwe-bash, ungasebenzisa i-bash esikhundleni se-sh, noma yikuphi okulula kakhulu kuye ngesithombe esiyisisekelo.
Yakha noma wakhe kabusha izithombe: docker-compose build kanye docker-compose pull
Uma ushintshe noma yimaphi ama-Dockerfiles noma ingxenye yomongo wokwakha , kuzodingeka wakhe kabusha izithombe ezihlobene:
docker-compose build
# O bien para un servicio concreto
docker-compose build api
Uma izithombe zivela kurejista ekude (i-Docker Hub, irejista yangasese, njll.) futhi ufuna nje ukulanda inguqulo yakamuva emenyezelwe ku-YAML, usebenzisa:
docker-compose pull
Khumbula ukuthi ungahlala usebenzisa imiyalo "ejwayelekile" ye-Docker (i-docker ps, izithombe ze-docker, i-docker volume ls, i-docker network ls, njll.), kodwa ukuze kulondolozwe ukuvumelana kwephrojekthi kungcono ukusingatha konke okuthinta izinsizakalo ezichazwe ku-docker-compose.yml nge-Compose.
Isibonelo esiphelele: Uhlelo lokusebenza lwe-Node.js + MySQL olune-Docker kanye ne-Docker Compose
Ake sibheke isibonelo esingokoqobo : i-REST API ku-Node.js esebenzisa i-MySQL ukugcina ulwazi (isibonelo, idatha yemoto). Ukugeleza okujwayelekile kungaba:
- Thuthukisa i-API kusetshenziswa iziguquguquko zemvelo ukuze kulungiselelwe.
- Dala i-Dockerfile ye-API.
- Yakha futhi, uma ufuna, layisha isithombe ku-Docker Hub.
- Chaza i-docker-compose.yml nge-API kanye nesizindalwazi.
- Qala konke futhi usebenze nge-docker-compose up bese uzama uhlelo lokusebenza.
1. I-Node.js API ilungiselelwe iziguquguquko zemvelo
Ake sithi unephrojekthi ye-Node ene-Express eveza amanye ama-endpoints okubuza, ukudala, nokufaka kuhlu izimoto. Isihluthulelo lapha akuyona ikhodi ngokwayo, kodwa kunalokho ukuthi ukucushwa kokuxhumeka kwedathabheyisi kuvela eziguquguquki zemvelo ezifana ne-DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, njll.
Lokhu kubalulekile ekusebenzeni kahle ne-Docker : awufuni ukushisa iziqinisekiso noma ama-URL kukhodi, kodwa kunalokho faka ipharamitha ngesikhathi sokufakwa, kungaba endaweni noma efwini.
2. Ifayela le-Docker lohlelo lokusebenza lwewebhu
Ngaphakathi kwesikhombisi sohlelo lokusebenza, udala i-Dockerfile ezophatha ukwakha isithombe . Isibonelo esiyisisekelo singaba:
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Le Dockerfile iqala ngeNode image esemthethweni , ifaka ukuncika, ikopishe ikhodi, iveze imbobo yohlelo lokusebenza (3000 kulokhu), futhi ichaza umyalo wokuqalisa. Ukusuka lapha, ungakha isithombe endaweni yakini:
docker build -t mi_usuario/mi-api-coches:latest .
Qinisekisa ukuthi isithombe sikhona usebenzisa i-`docker images` , futhi uma konke kusebenza kahle, ungayisebenzisa ngisho naleyo API esitsheni esihlukile usebenzisa i-`docker run`. Kodwa ingxenye ethakazelisayo izofika lapho sihlela ngesizindalwazi sisebenzisa i-Compose.
3. Layisha isithombe kwirekhodi (ongakukhetha kodwa okuwusizo kakhulu)
Uma ufuna ukukwazi ukufaka uhlelo lwakho lokusebenza komunye umshini (i-cloud VM, isibonelo) , kulula kakhulu ukulayisha isithombe ku-Docker Hub noma kwenye irejista. Ukuze wenze lokhu:
docker login
# te pedirá usuario y contraseña
docker push mi_usuario/mi-api-coches:latest
Uma ufuna ukucacisa i-version , ungabhala amalebula ezinguqulweni eziningi:
docker tag mi_usuario/mi-api-coches:latest mi_usuario/mi-api-coches:v1
docker push mi_usuario/mi-api-coches:v1
Kuseva lapho uzosebenzisa khona i- deploy , uzodinga nje ukwenza i- docker pull yesithombe bese uyisebenzisa ku- docker-compose.yml, ngaphandle kokudinga ukuyakha kabusha lapho.
4. Chaza i-docker-compose.yml nge-API kanye ne-MySQL
Isinyathelo esilandelayo ukudala ifayela le-docker-compose.yml elihlanganisa i-API kanye nedathabheyisi , futhi lengeza ivolumu yedatha ye-MySQL kanye, uma kudingeka, iskripthi sokuqalisa :
version: '3.8'
services:
web:
image: mi_usuario/mi-api-coches:latest
container_name: api_coches
ports:
- "3000:3000"
environment:
DB_HOST: db
DB_USER: coches_user
DB_PASSWORD: coches_pass
DB_NAME: coches_db
depends_on:
- db
networks:
- coches_net
db:
image: mysql:8
container_name: mysql_coches
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: coches_db
MYSQL_USER: coches_user
MYSQL_PASSWORD: coches_pass
volumes:
- datos_mysql:/var/lib/mysql
- ./initdb:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
networks:
- coches_net
volumes:
datos_mysql:
networks:
coches_net:
driver: bridge
Kunemininingwane eminingana ethakazelisayo kulokhu kulungiselelwa :
- I-API ikhomba kudathabheyisi isebenzisa i-DB_HOST=dbokufana negama lesevisi ye-MySQL. I-Docker Compose inikeza i-DNS yangaphakathi, ngakho akudingeki ukhathazeke ngama-IP; vele usebenzise igama lesevisi.
- Ifolda ethi ./initdb ifakwe ku-/docker-entrypoint-initdb.d esitsheni se-MySQLLokhu kukuvumela ukuthi ufake izikripthi ze-.sql noma ze-.sh ezisebenza ngokuzenzakalelayo ekuqaleni kokuqala (isibonelo, ukudala amathebula, ukufaka idatha yesampula, njll.).
- Idatha ye-MySQL igcinwa kuvolumu ye-data_mysqlNgakho-ke uma ulahla izitsha nge-docker-compose phansi, ulwazi lwedatha luhlala lungashintshi.
- Zombili izinsizakalo zabelana ngenethiwekhi ye-coches_net.esebenza njengenethiwekhi yangaphakathi ehlukanisiwe. Ngaphandle uveza kuphela amachweba owafunayo (3000 ye-API, 3306 uma udinga ukufinyelela i-database ungaphandle, okuyinto ngezinye izikhathi engadingeki ngisho).
5. Sebenzisa futhi uhlole uhlelo lokusebenza
Njengoba ifayela le-docker-compose.yml selilungile, ukulisebenzisa kulula njengokuliqalisa kusuka kufolda yefayela:
docker-compose up -d
Isikhathi sokuqala sizothatha isikhathi eside ngoba kufanele ilande izithombe ze-MySQL (kanye ne-API uma ingeyona yendawo), idale ivolumu, bese isebenzisa izikripthi zokuqalisa. Bese, ukuhlola isimo:
docker-compose ps
Uma konke "Kuphezulu", ungaqala ukwenza izicelo ze-API kusuka ku-curl noma ku-Postman. Isibonelo:
# Listar todos los coches
curl http://localhost:3000/coches
# Obtener un coche concreto
curl http://localhost:3000/coches/1
# Crear un coche vía POST
curl -X POST http://localhost:3000/coches \
-H "Content-Type: application/json" \
-d '{"marca": "Seat", "modelo": "León"}'
Uma ufuna ukuvala ukufakwa, mane usebenzise i-`docker-compose down` . Uma ungayisusi ivolumu, idatha izogcinwa ukuze iqale kabusha okulandelayo.
Ukusebenzisa i-Docker Compose kumaseva efu kanye ne-Portainer
Konke esikubonile kusebenza ngokulinganayo ekufakeni kukhompyutha yakho ephathekayo njengakuseva yamafu . Umehluko ngokuyisisekelo ukuthi usebenzisaphi imiyalo ye-docker-compose up nokuthi uvula kanjani ama-port emhlabeni wangaphandle.
Indlela elula kakhulu yamaphrojekthi omuntu siqu noma amaphrojekthi aseceleni ukudala i-VM encane (isibonelo, i-e2-micro yamahhala ku-Google Cloud), faka i-Docker kanye ne-Docker Compose, hlanganisa indawo yakho yokugcina ngekhodi kanye ne-docker-compose.yml, bese uqalisa uhlelo lokusebenza lapho.
Ukuphela kwento okudingeka uyikhumbule inqubomgomo yomlilo yomhlinzeki wakho : uma uhlelo lwakho lokusebenza lulalela ku-port 3000, kufanele uvule leyo port kuzilungiselelo zenethiwekhi yomhlinzeki wakho (noma usebenzise i-reverse proxy kuma-port 80/443 uma ufuna ukuvikeleka kakhulu nge-HTTPS). Uma i-port isivuliwe, ungayifinyelela usebenzisa i-http://SERVER_IP:3000 kunoma yisiphi isiphequluli.
Uma ukuphatha izitsha ngomugqa womyalo kuzwakala kunzima, ungasebenzisa i-Portainer , ithuluzi elisebenza futhi esitsheni futhi linikeza isikhombimsebenzisi sewebhu sokuphatha i-Docker (kanye ne-Docker Compose). Ukuze usethe i-Portainer kuseva, ungenza into efana nale:
docker volume create portainer_data
docker run -d \
-p 8000:8000 -p 9000:9000 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer
Ngemuva kwalokho uzongena ku-Portainer ku-http://SERVER_IP:9000 , udale umsebenzisi womlawuli bese usuka lapho ubona iziqukathi, ama-Compose stacks, amanethiwekhi, amavolumu, njll., konke kusuka kusiphequluli.
Ukusebenza nge-Docker Compose kukuvumela ukuthi uhlanganise yonke imiklamo yohlelo lokusebenza kufayela elilodwa , okwenza kube lula kunoma yimuphi unjiniyela, kusuka ku-laptop yakhe noma i-VM ekude, ukuthi aqalise isitaki esifanayo ngomyalo owodwa. Ukwengeza imikhuba emihle njengokusebenzisa iziguquguquko zemvelo, amanethiwekhi angaphakathi, amavolumu aqhubekayo, futhi, uma kudingeka, amathuluzi afana ne-Portainer, unesisekelo esiqinile sokusebenzisa konke kusukela kumaphrojekthi amancane omuntu siqu kuya ezindaweni ezingathi sína ngaphandle kokulahleka enkambisweni.
Umbhali oshisekayo ngomhlaba wamabhayithi nobuchwepheshe ngokujwayelekile. Ngiyathanda ukwabelana ngolwazi lwami ngokubhala, futhi yilokho engizokwenza kule bhulogi, ngikubonise zonke izinto ezithakazelisayo kakhulu ngamagajethi, isofthiwe, ihadiwe, izitayela zobuchwepheshe, nokuningi. Inhloso yami ukukusiza ukuthi uzulazule emhlabeni wedijithali ngendlela elula nejabulisayo.