Днес се опитвах да генерирам Docker образ от Node.js проект и исках да го разположа на моя локален тестов swarm.

За съжаление, ако човек създаде локален Docker образ, той се съхранява и е достъпен само на възела, на който е създаден, а останалите възли в swarm не могат да го достъпят.

Решението е образът да се качи (push) в Docker регистър, от който всички възли в swarm могат да го изтеглят (pull).

Създаване на регистъра

За да стартирате регистър услуга в swarm, изпълнете:

docker service create —name registry —publish 5000:5000 registry:latest

Това ще създаде услугата registry и ще я стартира в swarm, като я направи достъпна за всички възли в swarm.

Качване на образ в регистъра

За да качите образ в регистъра, трябва да направите две неща – да го тагнете и след това да го push-нете.

Ето пример как да build-нете и тагнете образа наведнъж:

docker build . -t localhost.localdomain:5000/:latest

И как да го качите в регистъра:

docker push localhost.localdomain:5000/:latestИзползване на образа в услуга/контейнер/и т.н.

За да използвате образа в услуга или контейнер, посочвате пълния път от по-горе, т.е. localhost.localdomain:5000/<image-name>:latest.

Възлите в swarm ще имат достъп до образа и ще могат да го изтеглят и стартират.

Важна забележка относно адреса на регистъра

В повечето уроци онлайн адресът на регистъра е даден като localhost:5000. За съжаление това не работи и обикновено изтича времето за изчакване, когато се опитате да го ползвате. Ако го смените с localhost.localdomain, ще заработи!

Не знам защо се случва това, при положение че и localhost, и localhost.localdomain се разрешават до 127.0.0.1.