Ismét egy olyan problémába futottam, aminek a megoldása egy jó adag keresgélést és kísérletezést húzott maga után, úgyhogy megosztom a megoldást, hátha valakinek leegyszerűsítem a dolgát.
Történt a minap, hogy egy új szerveralkalmazást kellett írnom, ezúttal node.js-ben. Nem csak maga a node volt a lényeg, hanem a tesztelés egy speciális package/app telepítését kívánta meg, aminek a nevét le sem merem írni. Igen, egy google-dologról van szó. (De kezet mostam, miután használtam! :D)
Ez a kis cucc is node-ot kér maga alá, de nem a google készítette. Mivel egy kis, pár ember által karban tartott program, nincs felhúzva a legújabb node verzióra. Na, itt kezdődtek a bajok.
Ja, igen, fontos, hogy teszteléshez mindenképpen dockerben akartam futtatni az appot, meg minden egyebet, ami a teszteléséhez szükséges.
Első körben tehát nekimentem a dockerhubon elérhető node image-ekkel. A slim és az alpine nyűgjei után gyorsan a “nagy” node-image-re bíztam magam. Igenám, de a legutóbbi, 9.9.0-es verzió inkompatibilisnak bizonyult a programmal, amit futtatnék…
Oké, akkor keressünk egy régebbi image-et! Hogy ne csak vaktába lövöldözzünk, nézzük meg, milyen verziót akar magának a program! 6.11.valami. Csodás, akkor húzzunk le arra egy node image-et!
De nincs. 6.11-ből nem készült.
Megpróbáltam a 6.13-assal, de nem működött.*
Itt döntöttem úgy, hogy akkor fogok valami linux image-et, és felrakom rá kézzel(-lábbal) a node-ot, lesz, ami lesz.
A rengeteg nyűglődés, hibaüzenet és egyéb sztorijával nem untatnék senkit, inkább itt a végleges Dockerfile (releváns részletei):
FROM ubuntu ... RUN apt-get update && apt-get install -y apt-transport-https RUN apt-get install -y curl RUN curl --silent --location https://deb.nodesource.com/setup_6.x | bash - RUN apt-get install -y nodejs RUN apt-get install -y build-essential ... ENTRYPOINT [ "bash", "start.sh" ]
Az image természetesen lehet egy másik linux is, igazság szerint nem vanilla ubuntut használtam a végén, mert van kisebb is. A legelső RUN azért kell, hogy https csatornán keresztül is lehessen telepíteni. A következő, hogy legyen cURL telepítve, majd jön a node megfelelő verziójának lekapása (setup_6.x…), telepítése, és ne felejtsük el, hogy mindig a -y kapcsolóval kell installt hívni, mert nem tudunk telepítés közben válaszolgatni az apt-get kérdéseire.
Ennyi, remélem, valaki hasznát veszi majd.
*: slusszpoén, hogy utóbb megfejtettem, hogy mégiscsak megy 6.13-mal, de addigra már aaaannyira mindegy volt. 🙂