Ass Docker e Spillsaach oder net? Oder ass et nach ëmmer wouer?

Hallo jiddereen!

Ech wëll wierklech direkt op d'Thema kommen, awer et wier méi korrekt e bëssen iwwer meng Geschicht ze erzielen:

Element

Ech sinn e Programméierer mat Erfahrung an der Entwécklung vun Frontend Single Säit Uwendungen, Scala / Java an Nodejs um Server.

Zënter enger laanger Zäit (definitiv e puer oder dräi Joer) war ech der Meenung datt Docker Manna aus dem Himmel ass an allgemeng e ganz coolt Tool an absolut all Entwéckler soll et benotze kënnen. An dovunner kënnt et datt all Entwéckler Docker op hirer lokaler Maschinn installéiert soll hunn. Wat iwwer meng Meenung, kuckt duerch d'Vacances déi op der selwechter hh gepost ginn. All zweet enthält eng Ernimmung vum Docker, a wann Dir et besëtzt, wäert dëst Äre kompetitive Virdeel sinn 😉

Um Wee hunn ech vill Leit begéint, mat hiren ënnerschiddlechen Attitudë vis-à-vis vum Docker a säin Ökosystem. E puer soten datt dëst eng praktesch Saach ass déi Cross-Plattform Funktionalitéit garantéiert. Déi zweet hunn net verstanen firwat se an Container lafe sollen a wat fir en Gewënn dovunner géif kommen, déi Drëtten hunn et guer näischt gefillt an net gestéiert (si hu just de Code geschriwwen an heem gaang - ech beneiden se, vun der Wee :)

Grënn fir benotzen

Firwat hunn ech Docker benotzt? Wahrscheinlech aus de folgende Grënn:

  • Datebank starten, 99% vun Uwendungen benotzen se
  • lancéiert nginx fir Frontend Verdeelung a Proxying op Backend
  • Dir kënnt d'Applikatioun an engem Docker-Bild packen, sou funktionnéiert meng Applikatioun iwwerall wou Docker existéiert, de Verdeelungsproblem gëtt direkt geléist
  • Service Entdeckung aus der Këscht, Dir kënnt Mikroservicer erstellen, all Container (verbonne mat engem gemeinsamen Netzwierk) kann en aneren iwwer en Alias ​​erreechen, ganz bequem
  • Et ass lëschteg e Container ze kreéieren an ze "spillen".

Wat ech ëmmer NET iwwer Docker gär hunn:

  • Fir datt meng Applikatioun funktionnéiert, brauch ech Docker selwer um Server. Firwat brauch ech dat wann meng Uwendungen op jre oder nodejs lafen an d'Ëmwelt fir si schonn um Server ass?
  • wann ech meng (privat) lokal gesammelt Bild op engem Remote-Server ausféiere wëll, da brauch ech mäin eegene Docker-Repository, ech brauch de Registry fir iergendwou ze schaffen, an ech muss och https konfiguréieren, well docker cli funktionnéiert nëmmen iwwer https. Oh verdammt ... et ginn natierlech Optiounen fir d'Bild lokal iwwer ze späicheren docker save a schéckt einfach d'Bild iwwer scp ... Mee dat ass vill Kierperbeweegungen. An ausserdeem gesäit et aus wéi eng "Kräiz" Léisung bis Ären eegene Repository erschéngt
  • docker-compose. Et ass nëmmen néideg fir Container ze lafen. Dat ass alles. Hien kann näischt anescht maachen. Docker-compose huet eng Rëtsch Versioune vu senge Fichieren, seng eege Syntax. Egal wéi deklarativ et ass, ech wëll hir Dokumentatioun net liesen. Ech wäert et néierens soss brauchen.
  • wann se an engem Team schaffen, schreiwen déi meescht Leit eng Dockerfile ganz kromme, verstinn net wéi se cache ass, füügt alles bäi wat se brauchen an net brauchen op d'Bild, ierwen vu Biller déi net an Dockerhub oder engem privaten Repository sinn, erstellt e puer docker-compose Dateien mat Datenbanken an näischt bleift. Zur selwechter Zäit erklären d'Entwéckler houfreg datt Docker cool ass, alles funktionnéiert lokal fir si, an HR schreift wichteg an der Vakanz: "Mir benotzen Docker a mir brauchen e Kandidat mat sou enger Aarbechtserfahrung."
  • Ech sinn dauernd verfollegt vu Gedanken iwwer alles an Docker z'erhéijen: postgresql, kafka, redis. Et ass schued datt net alles a Container funktionnéiert, net alles ass einfach ze konfiguréieren an ze lafen. Dëst gëtt vun Drëtt-Partei Entwéckler ënnerstëtzt, an net vun de Verkeefer selwer. An iwwregens, d'Fro stellt sech direkt: Verkeefer maachen sech keng Suergen iwwer d'Erhalen vun hire Produkter am Docker, firwat ass dat, vläicht wësse se eppes?
  • D'Fro stellt sech ëmmer iwwer d'Persistenz vu Containerdaten. an dann denkt Dir, soll ech just den Hostverzeichnis montéieren oder en Dockervolumen erstellen oder en Datecontainer maachen deen elo ass deprecated? Wann ech e Verzeechnes montéieren, da muss ech sécher sinn datt d'Uid an d'Gid vum Benotzer am Container mat der ID vum Benotzer entsprécht deen de Container lancéiert huet, soss ginn d'Fichier'en erstallt vum Container mat Rootrechter erstallt. Wann ech benotzen volume da ginn d'Donnéeën einfach an e puer erstallt /usr/* an et gëtt déi selwecht Geschicht mat uid an gid wéi am éischte Fall. Wann Dir en Drëtt-Partei-Komponent lancéiert, musst Dir d'Dokumentatioun liesen an d'Äntwert op d'Fro sichen: "a wéi engem Containerverzeichnisser schreift de Komponent Dateien?"

Ech hunn ëmmer net gär datt ech ze laang mam Docker hu misse matmaachen an der éischter Etapp: Ech hu erausfonnt wéi Dir Container lancéiert, vu wéi enger Biller fir ze starten, hunn Makefiles gemaach déi Aliasen fir laang Docker Kommandoen enthalen. Ech haassen Docker-compose well ech net en anert Tool am Docker-Ökosystem léiere wollt. AN docker-compose up Et huet mech gestéiert, besonnesch wa se sech nach do begéint hunn build Konstruktiounen, anstatt scho versammelt Biller. Alles wat ech wierklech wollt war just e Produkt effizient a séier ze maachen. Awer ech konnt net erausfannen wéi ech Docker benotzen.

Aféierung Ansible

Viru kuerzem (virun dräi Méint) hunn ech mat engem DevOps Team geschafft, bal all Member vun deem eng negativ Haltung vis-à-vis Docker hat. Aus Grënn:

  • docker Regelen iptables (och wann Dir et an daemon.json desaktivéiere kënnt)
  • docker ass Buggy a mir lafen et net an der Produktioun
  • wann den Docker-Daemon ofbriechen, da falen all Container mat Infrastruktur deementspriechend
  • kee Besoin fir Docker
  • firwat docker wann et Ansible a virtuell Maschinnen

An der selwechter Aarbecht sinn ech mat engem aneren Tool kennen - Ansible. Ech hunn et eemol héieren, awer ech hunn net probéiert meng eegen Spillbicher ze schreiwen. An elo hunn ech ugefaang meng Aufgaben ze schreiwen an dunn huet meng Visioun komplett geännert! Well ech gemierkt hunn: Ansible huet Moduler fir déiselwecht Docker Container ze lafen, Bildbaut, Netzwierker, etc., a Container kënnen net nëmmen lokal lafen, awer och op Fernserveren! Meng Freed wousst keng Grenzen - ech hunn en NORMAL Tool fonnt a meng Makefile an Docker-Compose Dateien ewechgehäit, si goufen duerch yaml Aufgaben ersat. De Code gouf reduzéiert andeems Dir Konstrukter benotzt wéi loop, whenEtc.

Docker fir Drëtt Partei Komponenten wéi Datenbanken ze lafen

Ech hunn viru kuerzem mat ssh Tunnel kennegeléiert. Et huet sech erausgestallt datt et ganz einfach ass den Hafen vun engem Remote Server op e lokalen Hafen ze "Forward". De Remote Server kann entweder eng Maschinn an der Wollek sinn oder eng virtuell Maschinn déi an VirtualBox leeft. Wann mäi Kolleg oder ech eng Datebank (oder eng aner Drëtt-Partei Komponent) brauchen, kënne mir de Server einfach mat dëser Komponent starten an ausschalten wann de Server net gebraucht gëtt. Port Forwarding gëtt dee selwechten Effekt wéi eng Datebank déi an engem Docker Container leeft.

Dëse Kommando féiert mäi lokalen Hafen op e Fernserver deen postgresql leeft:

ssh -L 9000:localhost:5432 [Email geschützt]

Mat engem Remote Server léist de Problem mat der Teamentwécklung. Sou e Server ka vu verschiddenen Entwéckler gläichzäiteg benotzt ginn; Si brauchen net fäeg ze postgresql ze konfiguréieren, Docker an aner Intricacies ze verstoen. Op engem Fernserver kënnt Dir déiselwecht Datebank am Docker selwer installéieren, wann et schwéier ass eng spezifesch Versioun z'installéieren. All Entwéckler brauchen ass ssh Zougang ze bidden!

Ech liesen viru kuerzem datt SSH Tunnel eng limitéiert Funktionalitéit vun engem normale VPN sinn! Dir kënnt einfach OpenVPN oder aner VPN-Implementatiounen installéieren, d'Infrastruktur opbauen an et un d'Entwéckler ginn fir ze benotzen. Dëst ass sou cool!

Glécklecherweis ginn AWS, GoogleCloud an anerer Iech e Joer gratis Benotzung, also benotzt se! Si si bëlleg wann Dir se ausschalt wann se net benotzt ginn. Ech hu mech ëmmer gefrot firwat ech e Fernserver wéi gcloud brauch, et schéngt wéi ech se fonnt hunn.

Als lokal virtuell Maschinn kënnt Dir déi selwecht Alpine benotzen, déi aktiv an Docker Container benotzt gëtt. Gutt, oder e puer aner liicht Verdeelungen fir d'Maschinn méi séier ze booten.

Bottom Line: Dir kënnt a sollt Datenbanken an aner Infrastruktur Goodies op Fernserveren oder an der Virtualbox lafen. Ech brauch keen Docker fir dës Zwecker.

E bëssen iwwer Docker Biller a Verdeelung

Ech hu scho geschriwwen Artikel an deem ech wollt vermëttelen datt d'Benotzung vun Docker Biller keng Garantie bitt. Docker Biller sinn nëmme gebraucht fir en Docker Container ze kreéieren. Wann Dir op en Docker-Bild upgradéiert, da upgrade Dir fir Docker-Container ze benotzen an Dir wäert se nëmme benotzen.

Hutt Dir iergendwou gesinn wou Software Entwéckler hir Produkter nëmmen an engem Docker Bild portéieren?
D'Resultat vun de meeschte Produkter ass binär Dateie fir eng spezifesch Plattform; si ginn einfach an d'Docker-Bild bäigefüügt, dat vun der gewënschter Plattform ierflecher ass. Hutt Dir jeemools gefrot firwat et sou vill ähnlech Biller op dockerhub sinn? Gitt nginx zum Beispill, Dir gesitt 100500 Biller vu verschiddene Leit. Dës Leit hunn den nginx net selwer entwéckelt, si hunn einfach offiziell nginx zu hirem Docker-Bild bäigefüügt an et mat hiren eegene Configuratioune fir d'Bequemlechkeet fir Container ze starten.

Am Allgemengen, kënnt Dir et einfach an tgz späicheren, wann iergendeen et am Docker muss lafen, da loosst se tgz an d'Dockerfile addéieren, ierwen aus dem gewënschten Ëmfeld an erstellen zousätzlech Buns déi d'Applikatioun selwer an tgz net änneren. Jiddereen deen en Docker-Bild erstellt, weess wat tgz ass a wat hien brauch fir ze schaffen. Dëst ass wéi ech Docker benotzen hei

Bottom Line: Ech brauch keen Docker Registry, ech benotzen eng Aart S3 oder just Dateilagerung wéi Google Drive / Dropbox

Docker an CI

All d'Firmen, fir déi ech geschafft hunn, sinn ähnlech. Si sinn normalerweis Epicerie. Dat ass, si hunn eng Applikatioun, een Technologie Stack (gutt, vläicht e puer oder dräi Programméierungssproochen).

Dës Firme benotzen Docker op hire Serveren wou de CI Prozess leeft. Fro: Firwat musst Dir Projeten an engem Docker Container op Äre Server bauen? Firwat net just en Ëmfeld fir de Bau preparéieren, zum Beispill en Ansible Playbook schreiwen, deen déi néideg Versioune vun nodejs, php, jdk, kopéieren ssh Schlësselen, etc.

Elo verstinn ech, datt dat mech an de Fouss schéisst, well Docker bréngt kee Gewënn mat senger Isolatioun. Probleemer déi ech mam CI am Docker begéint hunn:

  • erëm braucht Dir e Docker Bild ze bauen. Dir musst e Bild sichen oder Ären eegene Docker-Datei schreiwen.
  • 90% déi Dir braucht fir e puer ssh Schlësselen weiderzebréngen, geheim Donnéeën déi Dir net op d'Docker Bild schreiwen wëllt.
  • de Container gëtt erstallt a stierft, all Cache ginn zesumme mat him verluer. déi nächst Build wäert all d'Projet Ofhängegkeeten eroflueden, wat Zäitopwendeg an ineffektiv ass, an Zäit ass Suen.

Entwéckler bauen keng Projeten an Docker Container (ech war eemol esou Fan, wierklech, ech fille mech leed an der Vergaangenheet xD). Am Java ass et méiglech verschidde Versiounen ze hunn an se mat engem Kommando z'änneren op deen deen Dir elo braucht. Et ass d'selwecht an nodejs, et gëtt nvm.

Konklusioun

Ech gleewen datt Docker e ganz mächtegt a flexibel Tool ass, dëst ass säin Nodeel (klängt komesch, jo). Mat senger Hëllef kënnen d'Firmen ganz einfach drop ukoppelen an et benotze wou néideg an net néideg. Entwéckler lancéieren hir Container, e puer vun hiren Ëmfeld, da fléisst et alles glat an d'CI an d'Produktioun. D'DevOps Team schreift eng Aart Code fir dës Container ze lafen.

Benotzt Docker nëmmen op déi lescht Etapp an Ärem Workflow, zitt et net am Ufank an de Projet. Et wäert Är Geschäftsproblemer net léisen. Hie wäert d'Problemer nëmmen op ENNER Niveau réckelen a seng eege Léisungen ubidden, Dir wäert duebel Aarbecht maachen.

Wann Docker gebraucht gëtt: Ech sinn zur Conclusioun komm datt Docker ganz gutt ass fir e bestëmmte Prozess ze optimiséieren, awer net fir Basisfunktionalitéit ze bauen

Wann Dir nach ëmmer decidéiert Docker ze benotzen, dann:

  • extrem virsiichteg sinn
  • zwéngt d'Entwéckler net fir Docker ze benotzen
  • lokaliséiert seng Notzung op enger Plaz, verbreet et net iwwer all Dockefile an Docker-compose Repositories

PS:

Merci fir d'Liesen, ech wënschen Iech transparent Entscheedungen an Ären Affären a produktiven Aarbechtsdeeg!

Source: will.com

Setzt e Commentaire