Fẹ́rẹ̀ẹ́ gbogbo àpilẹ̀kọ nípa ìṣòro yìí ń dá àkójọpọ̀ náà lẹ́bi, ìdí niyẹn tí àtúnṣe fi ń gba àkókò púpọ̀. O ní bind mount tí ń ṣiṣẹ́, VPN ilé-iṣẹ́ so mọ́, àti pé docker compose up báyìí ó kùnà pẹ̀lú ojú-ọ̀nà orísun tí ó sọnù, àpò òfìfo, tàbí gbígbé tí ẹ̀rọ kọ̀ láti ṣẹ̀dá. Nínú àwọn àyíká tí mo ti tún ṣe, fáìlì Compose kò yí padà, ojú-ọ̀nà sì tọ̀nà. Ohun tí ó yí padà ni irú daemon tí ó gba ìbéèrè náà, àṣìṣe gbígbé náà sì jẹ́ ibi àkọ́kọ́ tí ìyàtọ̀ yẹn fi hàn.

Àkójọpọ̀ kò yí kúrò rí; ìbéèrè ni ó yí kúrò

Àmì -v /srv/app:/app kì í ṣe ẹ̀dà àpò tí shell rẹ ń ṣe. Ẹ̀rọ náà yí i padà sí ìbéèrè API, daemon tí ó ń dáhùn sì ń yanjú /srv/app ní ìbámu pẹ̀lú ètò fáìlì tirẹ̀. Nígbà tí ẹ̀gbẹ́ méjèèjì ń ṣiṣẹ́ lórí kernel kan náà, ojú-ọ̀nà yẹn ni ohun tí o rí nínú olùṣàkóso fáìlì. Nígbà tí endpoint yí padà, a ń wá okùn kan náà lórí ẹ̀rọ tí kò gbọ́ nípa àpò iṣẹ́ rẹ rí, daemon sì ń sọ pé orísun sọnù tàbí ó ń ṣẹ̀dá àpò òfìfo ní ìdákẹ́jẹ́ ní ààyè rẹ̀.

Ìdí niyẹn tí àkójọpọ̀ onílórúkọ fi ń ṣiṣẹ́ nígbà tí bind mount kò ṣe bẹ́ẹ̀. -v appdata:/app ń pe ìpamọ́ tí daemon ní ní orúkọ, nítorí náà kò sí ojú-ọ̀nà olùgbàlejò tí ó gbọdọ̀ wà ní ibi pàtó kan. Bí yíyí iṣẹ́ kan padà láti bind mount sí àkójọpọ̀ onílórúkọ bá mú kí àṣìṣe náà pòórá, o kò tíì tún ìṣòro náà ṣe. O ti fìdí rẹ̀ múlẹ̀ pé ẹ̀rọ àti daemon kò fohùn ṣọ̀kan nípa ètò fáìlì tí ojú-ọ̀nà náà jẹ́ ti rẹ̀, àti pé àìṣọ̀kan yẹn yóò padà dé ní àkókò tí o bá tún nílò àpò olùgbàlejò gidi.

Tẹ̀ jáde endpoint kí o tó fọwọ́ kàn án gbígbé náà

Ọ̀pọ̀ ètò lè tọ́ka ẹ̀rọ sí endpoint, wọ́n sì kì í fohùn ṣọ̀kan nígbà gbogbo: --context àmì, DOCKER_CONTEXT, DOCKER_HOST nínú shell lọ́wọ́lọ́wọ́, àti àyíká tí a fipamọ́ sínú ìṣètò ẹ̀rọ. Dípò ríronú nípa ipò àkọ́kọ́, tẹ̀ gbogbo wọn jáde kí o sì fi àwọn ìdáhùn wé ara wọn.

docker context show
docker context ls
docker version
docker info --format "{{.Name}} {{.OperatingSystem}} {{.ServerVersion}}"

Ìṣètò ẹ̀rọ wà ní ~/.docker/config.json lórí Linux àti macOS àti ní %USERPROFILE%\.docker\config.json lórí Windows, àti pé iye tí a ṣe àgbékalẹ̀ níbẹ̀ lórí èròjà ìparí yóò borí èyí tí a fipamọ́ fún ìgbà yẹn nìkan. Bí endpoint bá jẹ́ orúkọ olùgbàlejò dípò socket àdúgbò, yíyanjú orúkọ àti àwọn ọ̀nà ni yóò pinnu ibi tí yóò dé, àti pé ìyẹn ni ohun tí ẹ̀rọ VPN ń tún kọ. Ìkọ̀ ojú irin tí ó ń fi ọ̀nà kún tàbí tí ó ń pààrọ̀ olùyọjú lè fi orúkọ tí ó ti ń túmọ̀ sí kọ̀ǹpútà rẹ̀ yìí ránṣẹ́ sí àdírẹ́sì nínú nẹ́tíwọ́kì ilé-iṣẹ́.

Fi ipò wé ara wọn, kì í ṣe ìṣètò. Ṣiṣẹ́ docker ps -a àti docker images pẹ̀lú ìkọ̀ ojú irin tí ó ti kùnà, lẹ́yìn náà lẹ́ẹ̀kan sí i pẹ̀lú rẹ̀ tí ó ń ṣiṣẹ́. Àkójọ àwọn kọ́nténà tí ó yàtọ̀ jẹ́ ẹ̀rí tí ó lágbára ju fáìlì ìṣètò kankan lọ, nítorí pé ó fi hàn pé daemon mìíràn ni ó dáhùn ìbéèrè rẹ.

Bèèrè lọ́wọ́ daemon bóyá ojú-ọ̀nà wà níbẹ̀

Nígbà tí o bá mọ irú daemon tí o dé, jẹ́ kí ó wo àpò náà. --mount ẹ̀dà náà kùnà pẹ̀lú ìfiránṣẹ́ tí ó yé ju àmì kúkúrú lọ, nítorí pé ó ń fi orísun múlẹ̀ kí ó tó bẹ̀rẹ̀ kọ́nténà:

docker run --rm --mount type=bind,source=/srv/app,target=/app alpine ls -la /app

Bí ó bá sọ pé orísun sọnù, ṣẹ̀dá rẹ̀ lórí ẹ̀rọ tí ó dáhùn, tàbí tọ́ka iṣẹ́ náà sí àkójọpọ̀ onílórúkọ kí o sì ṣe àdàkọ dátà sínú rẹ̀. Ohun tí kò yẹ kí o ṣe ni àtúnṣe àwọn àkójọpọ̀ àti àtúntò ẹ̀rọ ṣáájú àyẹ̀wò yìí. Àwọn ìgbésẹ̀ yẹn ń yí àyíká padà tó láti fi àìbámu náà pamọ́ nígbà tí wọ́n ń fi í sí ààyè rẹ̀.

Ọ̀nà mìíràn ń ṣiṣẹ́ ní ibi tí ó yàtọ̀ pátápátá: fífi image jáde jẹ́ iṣẹ́ daemon, kì í ṣe iṣẹ́ ẹ̀rọ. Fífi jáde tí ó ṣàṣeyọrí ń fi kìkì pé daemon lè dé registry hàn, bind mount tí ń ṣiṣẹ́ sì ń fi kìkì pé a yanjú ojú-ọ̀nà kan hàn. Dán gbogbo ọ̀nà wò ní ibi tí wọ́n ti ń ṣiṣẹ́ gan-an, bí bẹ́ẹ̀ kọ o máa lo ọ̀sán kan lórí èyí tí kò tọ̀nà.

Àwọn orúkọ intranet ń kùnà fún ìdí mìíràn

Ìlàjì méjì kejì ti ìròyìn kan náà sábà máa ń jẹ́ pé kọ́nténà kò lè dé intranet.corp.example. Ìyẹn jẹ́ ẹ̀rọ ọ̀tọ̀ọ̀tọ̀, kì í ṣe ìṣòro àkójọpọ̀ kejì. Kọ́nténà ń gba /etc/resolv.conf tirẹ̀ nígbà tí ó bẹ̀rẹ̀, tí a ṣẹ̀dá láti inú ètò olùyọjú daemon, nítorí náà olùpín DNS tí VPN fi kún lẹ́yìn tí a ṣẹ̀dá kọ́nténà kò ní farahàn níbẹ̀ títí a ó fi tún kọ́nténà ṣe.

Olùyọjú àkójọpọ̀ Docker lórí nẹ́tíwọ́kì tí olùṣàmúlò ṣàlàyé ń gbé àwọn ìwádìí ita lọ sí àwọn olùpín tí a ṣètò lórí olùgbàlejò, èyí tí ó ń ràn án lọ́wọ́ nígbà tí VPN ń tún olùyọjú olùgbàlejò kọ, tí ó sì ń ṣèṣe nígbà tí DNS pípín ń fi agbègbè inú ránṣẹ́ sí olùpín tí daemon kò rí mọ́. Àfọwọ́kàn tóóró àti tí ó yé ń yẹra fún àríyànjiyàn fún àwọn orúkọ tí kì í yí padà rí:

services:
  web:
    extra_hosts:
      - "intranet.corp.example:10.20.30.40"

Èyí ń kọ àkọsílẹ̀ sínú fáìlì hosts kọ́nténà, nítorí náà kọ́nténà kò kọ́ nkankan nípa ìkọ̀ ojú irin, ó sì tún ń dí àdírẹ́sì náà mú. Nígbà tí olùgbàlejò inú bá ṣí kúrò, àkọsílẹ̀ náà yóò wà ní àìtọ̀nà títí ẹnìkan yóò fi tún fáìlì Compose ṣe. Lò ó fún ẹ̀rọ tí ó dúró ṣinṣin tàbí dátàbésì tí a ti dí, kí o sì jẹ́ kí DNS ṣe àwọn orúkọ tí ń ṣí kúrò.

Kí ni àtúntò ń yí padà gan-an

Àtúntò Docker Desktop ń tún VM, socket àti àkójọ àyíká ṣe, gbígbé náà sì tún bẹ̀rẹ̀ sí ṣiṣẹ́. Èsì yẹn jẹ́ gidi, kò sì kọ́ nkankan, ìdí niyẹn tí àṣìṣe kan náà fi ń padà dé lẹ́yìn ìmúdójúìwọ̀n VPN tí ó tẹ̀le. Àtúntò náà rọ́pò endpoint tí ẹ̀rọ ń lò; kò mú ojú-ọ̀nà tí iṣẹ́ rẹ ń pè ní orúkọ bá ètò fáìlì tí daemon ń kà gan-an mu.

Ìtò iṣẹ́ mi kúkúrú. Fìdí rẹ̀ múlẹ̀ irú endpoint tí ẹ̀rọ yóò lò. Fìdí rẹ̀ múlẹ̀ irú daemon tí ó dáhùn nípa fífi àwọn àkójọ kọ́nténà wé ara wọn. Bèèrè lọ́wọ́ daemon yẹn kí ó ṣe àkójọ ojú-ọ̀nà orísun. Lẹ́yìn náà nìkan ni kí o tún gbígbé náà ṣe, fi àkọsílẹ̀ hosts kún, tàbí pààrọ̀ irú àkójọpọ̀. Bí o bá ń tọ́jú fáìlì Compose fún ẹgbẹ́ tí ń ṣiṣẹ́ lórí VPN, yàn àwọn àkójọpọ̀ onílórúkọ fún dátà tí daemon yẹ kí ó ní, kí ojú-ọ̀nà olùgbàlejò má baà di apá kan náà nínú àdéhùn.

Àwọn àpilẹ̀kọ tó jọra