Perché uno sviluppatore dovrebbe preoccuparsi di Docker?


11

Generalmente uno sviluppatore si preoccupa di soddisfare i requisiti aziendali. Potrebbe avere l'esperienza in un particolare stack o in un framework. Ma dovrebbe fare uno sforzo per imparare la docker ed i suoi vari metodi di schieramento (sciame, kube, mesos, ecc.)?

In poche parole, perché uno sviluppatore dovrebbe preoccuparsi della finestra mobile?

PS: La domanda principale di questo post è Implicazione dell'introduzione della finestra mobile nel team di sviluppo

Risposte:


7

Probabilmente non la risposta che stai cercando, ma una risposta comunque :)

La conoscenza della docker e dei suoi metodi di implementazione potrebbe effettivamente essere inclusa nei requisiti aziendali rendendola parte del progetto o dell'ambiente di sviluppo del team, proprio come il linguaggio (i) di codice, il sistema di controllo della versione, i compilatori, l'infrastruttura di test, ecc. quella squadra o su quel progetto bisogna conoscere e usare tutti questi, non si può "portare il proprio" (nella maggior parte dei casi).

Le cose diventano un po 'più complicate se per "uno sviluppatore" intendi effettivamente la maggioranza o addirittura l'intero team di sviluppo. Spingere uno strumento nell'ambiente di sviluppo senza che nessuno degli sviluppatori lo supporti sarà davvero difficile. Trascorrere del tempo per creare uno di questi sostenitori prima dalla leadership tecnica del team.

Nota a margine: potrebbe anche non essere necessario per ogni sviluppatore del team diventare un esperto di docker. Le ricette di utilizzo prestabilite racchiuse in comandi semplici e pronti per il cheatheet spesso consentono agli sviluppatori di utilizzare soluzioni basate su docker senza sapere davvero troppo sul loro funzionamento interno, il che potrebbe essere abbastanza accettabile, specialmente in team di grandi dimensioni. Proprio come essere in grado di contribuire con il codice senza conoscere tutti i dettagli su come viene costruito il prodotto finale.


Inoltre, puoi sfruttare qualsiasi tecnologia tu voglia, dandoti meno restrizioni e meno mal di testa per gli amministratori di sistema per supportare tutte le diverse tecnologie. E poiché lo "sviluppatore" decide la tecnologia, dovrebbe essere lui a configurare l'ambiente docker.
DarkMukke

@DarkMukke Lo "sviluppatore" non sempre decide la tecnologia ... Molto spesso è vero il contrario nei team di sviluppo più grandi: lo "sviluppatore" utilizza semplicemente la tecnologia utilizzata dal team. Le eccezioni potrebbero essere tollerate se non interferiscono o incidono negativamente sulle attività del team.
Dan Cornilescu,

Sono in parte d'accordo, ma ho visto grandi (oltre 200) aziende di sviluppo lavorare con docker nel modo che ho descritto. Penso che si tratti di scelte personali non solo dei team di sviluppo, ma anche del personale dirigente sopra di loro. Se ci sono devops decenti, la quantità di docker di cui uno sviluppatore ha bisogno è di solito banale.
DarkMukke

6

Ti darò la mia prospettiva. Gli sviluppatori dovrebbero preoccuparsi della docker in quanto vi sono altri sviluppatori che sono disposti a utilizzare la docker e hanno già sviluppato una propria esperienza. Sono disposti a ricoprire i ruoli di ingegnere DevOps oltre ad essere uno sviluppatore. Quindi la parte Ops di DevOps è ciò su cui ora stanno costruendo competenze.

In questi giorni, troverai sempre più ragazzi che possono sviluppare, orchestrare, automatizzare i test, automatizzare i lavori e costruire strumenti per monitorare e portare questo pacchetto completo in produzione da solo. Questi sono i ragazzi che stanno spingendo docker e altri strumenti nella comunità degli sviluppatori.

Inoltre, la marea del mercato è verso la virtualizzazione, il ridimensionamento automatico, l'automazione, l'apprendimento automatico e la docker in tutti questi aspetti. È diventato molto indispensabile utilizzare la finestra mobile. Le aziende sono disposte a pagare 2 volte per un singolo che si assume tutte queste responsabilità e quando c'è domanda per questi ragazzi, inizierà anche l'offerta. Questo è dal punto di vista di un dipendente-datore di lavoro.

Tecnicamente, nelle organizzazioni in cui ho lavorato, ci sono team di sviluppo e DevOps separati, anche se lavorano a stretto contatto per le consegne. Gli ingegneri e gli sviluppatori DevOps condividono qui una vasta maggioranza di competenze e quindi a volte vi è una negoziazione di compiti.

Il minimo indispensabile che uno sviluppatore può fare è condividere i suoi binari, ma deve capire che i binari verranno utilizzati per essere eseguiti all'interno di un contenitore docker e per questo deve capire come funziona la docker. Per kub, sciami, mesos ecc., Lo sviluppatore potrebbe non interessarsi nemmeno di ciò che viene utilizzato, ma le basi della docker dovrebbero essere molto ben comprese dallo sviluppatore e una mentalità dovrebbe essere lì fin dall'inizio per costruire l'applicazione liberamente accoppiata per il riutilizzo come micro-servizi. Se l'applicazione è costruita da quella mentalità (che richiede le basi della finestra mobile), gli ingegneri DevOps possono prenderla da lì per ridimensionare, orchestrare, testare, distribuire e monitorare automaticamente.

Inoltre, la maggior parte delle volte non esiste una taglia adatta a tutti i tipi di cose. Uno sviluppatore non sa chiaramente come costruire un'app compatibile con la finestra mobile e un ingegnere DevOps giustamente non conosce gli interni del processo di creazione dell'app. Quindi, la maggior parte delle volte, le organizzazioni preferiscono affidare entrambi questi compiti allo stesso ragazzo per accelerare le cose. Se esistono elementi separati, è necessario un meccanismo di feedback continuo dal team DevOps al team di sviluppo per rendere le app più futuristiche e predisposte per docker / cloud / ridimensionamento.


5

Non si tratta di Docker o di altre tecnologie di containerizzazione là fuori.

Contenitori come Docker, rkt, ecc. Sono solo un modo per distribuire la tua applicazione in modo simile al binario statico. Stai sviluppando la tua distribuzione in modo che contenga tutto ciò di cui ha bisogno all'interno e l'utente finale non ha bisogno di altro che di runtime.

Queste soluzioni sono simili ai JAR grassi di Java, dove tutto ciò che serve (in teoria) è solo pre-installato (JRE) preinstallato e tutto Just Works ™.


Il motivo per cui gli sviluppatori hanno bisogno di capire (non hanno bisogno di imparare come utilizzare tale strumento, solo perché è necessario) strumenti di orchestrazione è che questo ti consente di avere alcuni vantaggi rispetto alla distribuzione "tradizionale".

Bovini, non animali domestici

EngineYard ha scritto un buon articolo a riguardo. Il punto è che quando il tuo server si spegne, fai spallucce e aspetti che appariranno nuovi. Li tratti come bestiame, ne hai decine, centinaia, migliaia in esecuzione e quando uno scende, né tu né i tuoi clienti dovreste mai esserne consapevoli.

Gli strumenti di orchestrazione ottengono questo monitorando lo stato di tutte le applicazioni (pod / lavori, qualunque cosa) nel cluster e quando vede che uno dei server smette di rispondere (si arresta), sposta automaticamente tutte le applicazioni in esecuzione su quel server da qualche altra parte.

Migliore utilizzo delle risorse

Grazie all'orchestrazione puoi eseguire più applicazioni su un server e l'orchestrator monitorerà le risorse per te. Riordinerà le applicazioni quando richiesto.

Infrastruttura immutabile

Grazie alla gestione automatica del failover negli orchestrator è possibile eseguire le immagini personalizzate nel cloud così come sono. Quando avrai bisogno di un aggiornamento, devi solo creare una nuova immagine, impostare la tua Configurazione di avvio per usarla ora e semplicemente scorrere. Tutto sarà gestito per te:

  1. Crea un nuovo server con una nuova configurazione.
  2. Uccidi un server in esecuzione.
  3. Il tuo orchestratore sposta tutto su altre macchine (inclusa una nuova).
  4. Se sono rimasti dei vecchi server, vai su 1.

Operazioni più semplici

  • Non abbastanza risorse? Aggiungi nuova macchina al cluster.
  • Hai bisogno di più istanze di applicazione? Aumenta il numero e continua.
  • Monitoraggio? Fatto.
  • Gestione dei registri? Fatto.
  • Segreti? Indovina un po.

TL; DR L' intero punto non riguarda Docker ma l'orchestrazione. Docker è solo una versione estesa di JAR tarball / fat necessari per la corretta orchestrazione.


Questo è quello che sto chiedendo ed è di questo che tratta l'intera domanda. Gli sviluppatori dovrebbero preoccuparsi di un migliore utilizzo delle risorse, dell'infrastruttura immutabile e delle operazioni più semplici? ... Ciò che credo sia che dovrebbero concentrarsi sulla fornitura di requisiti aziendali e sull'ottimizzazione del codice che porterebbe a un migliore utilizzo delle risorse. Anche la finestra mobile non aiuterà a un migliore utilizzo se si tratta di un codice scritto male / medio. Accettiamo il fatto che i requisiti aziendali fanno sì che gli sviluppatori consegnino le cose più velocemente. E così facendo non hanno tempo per ottimizzare il codice. Perché aggiungere la responsabilità della finestra mobile su di essi?
Abhay Pai,

Il fatto è che avere una panoramica dell'intero stack, dai test all'implementazione e infine alla distribuzione, ti permetterà di vedere come viene utilizzato il tuo software, quali sono i casi limite, cosa sta andando in crash. Ti rallenterà nel LOC che scrivi, ma migliorerà notevolmente la loro qualità. Nel lungo periodo risparmiando tempo
Moritz,

4

Ecco ad esempio alcuni argomenti di un post sul blog pubblicato nel 2014 e intitolato in modo abbastanza corrispondente alla tua risposta:

  • Iniezione molto più flessibile di nuove tecnologie nell'ambiente
  • c'è ancora un grosso problema tra il commit del codice testato finale e il suo funzionamento sui server di produzione finali. Docker semplifica enormemente questo passaggio finale
  • Docker rende banale mantenere un sistema operativo legacy, indipendentemente dal tipo di Linux in uso

Da: https://thenewstack.io/why-you-should-care-about-docker/


Accetto l'iniezione di nuove tecnologie. Ma ci sono anche alcuni problemi. Come usare la finestra mobile per i database ( percona.com/blog/2016/11/16/is-docker-for-your-database ). Non sono stabili al momento e probabilmente sarebbero stabili in futuro. Speriamo per il meglio. Possiamo ottenere spingendo il codice testato alla produzione usando comunque CI / CD. Allora perché docker? Gli sviluppatori non si preoccupano di quale sistema operativo stiamo eseguendo. Perché dovrebbero anche preoccuparsi di imparare la finestra mobile in primo luogo? Per semplificare la vita a Devops?
Abhay Pai,

in primo luogo penso solo al seguente scenario "MVP": dev prova alcuni nuovi strumenti / configurazioni per l'ambiente come componente di infrastruttura, diciamo imagemagick. Senza Docker queste informazioni possono essere perse o dimenticate o necessitano di comunicazione insieme a molte altre piccole cose. La condivisione di un file Docker è una configurazione dimostrabile dal computer di un oggetto funzionante che persino essere utilizzato per realizzare manualmente un'infrastruttura senza Docker è più prezioso di una semplice documentazione. Sicuro che potresti andare anche per Puppet; la cosa bella di Docker è IMHO come consente scenari autonomi.
Peter Muryshkin,

Concordato. Ma il problema sorge durante l'orchestrazione. Lo sviluppatore deve avere una competenza nell'orchestrazione docker al fine di aderire alle migliori pratiche e soddisfare i requisiti aziendali. Considera il tuo scenario in cui lo sviluppatore ha bisogno di imagemagick come servizio. Ora, durante la creazione di un file docker, ottiene il controllo completo sui pacchetti che può installare nell'immagine docker. Cosa succede se installano sshd su ssh nella finestra mobile invece usando i log della finestra mobile? Cosa succede se installano strumenti che non hanno nulla a che fare con la logica aziendale ma compromettono la sicurezza? Gli sviluppatori hanno bisogno della competenza docker?
Abhay Pai,

hm ma cosa succede se implementano una backdoor basata su socket? la docker non sostituisce il firewall enteprise credo
Peter Muryshkin il

Vero. Ma sarebbe comunque un'intenzione maligna dello sviluppatore. Che si tratti di una finestra mobile o di una finestra mobile. Ma quando la finestra mobile viene introdotta agli sviluppatori, possono causare incidenti solo perché mancano delle conoscenze appropriate. Perché dovrebbero anche preoccuparsi di imparare la finestra mobile (considerando che l'orchestratore aumenterà anche la complessità) quando potrebbe causare incidenti e complicazioni? Per favore, non preoccuparti delle mie domande. Anche io amo la finestra mobile. Ma sto cercando di capire la prospettiva di uno sviluppatore. Sono stato uno sviluppatore me stesso negli ultimi 3 anni e ora sono un ingegnere DevOps.
Abhay Pai,

4

Se stai eseguendo la tua produzione nel container docker è fondamentale che tali container siano realizzati dagli stessi sviluppatori che hanno creato l'app in esecuzione su di essi. Chi altro è il posto migliore per sapere quale dipendenza esterna è necessaria e così via ...?

Inoltre, la pipeline può fallire in qualsiasi fase durante un CD, in particolare quando si tratta della fase di creazione dell'immagine della finestra mobile, a volte è un file mancante o una lib che è necessaria.

Al lavoro presentiamo tutti gli sviluppatori alla finestra mobile spiegando loro le basi per costruire il file docker al fine di servire la loro app, inoltre abbiamo semplificato la pipeline in modo da poter aggiungere solo un nome e un file docker e la sua app verrà automaticamente costruita sul prossima spinta indipendentemente dalla tecnologia che lo esegue.

Docker Quickstart è davvero un'ottima introduzione per farlo, dopo ciò che il team devOps guida lo sviluppatore nella scelta della distribuzione (molti di loro non conoscono cose del genere alpine).

Il nostro compito è fornire loro un facile accesso agli strumenti, fanno il resto in modo da poterlo riparare quando qualcosa non va. Docker fa davvero parte del processo di sviluppo e il team devOps fornisce loro immagini docker che soddisfano le nostre esigenze e che sono abbastanza facili, quindi ci vogliono solo un paio di minuti per creare una nuova app e distribuirla senza assistenza.


Quindi, secondo uno sviluppatore, l'uso della finestra mobile in un progetto dovrebbe essere ripreso solo se il progetto richiede dipendenza esterna? Penso che la docker sia diventata parte del nostro processo di sviluppo perché l'abbiamo applicata agli sviluppatori o perché riteniamo che sia interessante. Anche il problema sorge durante l'orchestrazione. Devono imparare l'orchestratore come sciame, kubernetes o mesos? L'implementazione di tutte queste orchestrazioni è diversa. Cosa succede se l'orchestrazione si interrompe a causa di una cattiva implementazione? Chi deve essere incolpato? PS: Non preoccuparti delle mie domande. Sto solo giocando l'avvocato di Devli. Anch'io amo la finestra mobile :)
Abhay Pai

2

Docker riceve molte menzioni su stampa e blog che portano gli sviluppatori a interessarsi ad usarlo. Per alcune persone è interesse a giocare con una nuova tecnologia o capire come funzionano le cose. Per altri è un desiderio aggiungere parole chiave al loro curriculum. Ad ogni modo, più sviluppatori sanno su come funzionano le cose e su come vengono implementate, meno sorprenderanno in seguito. Da quello che ho visto c'è un discreto interesse preesistente in questo, quindi non dovrebbe essere così difficile incoraggiarlo ulteriormente.


0

Bene, se hai mai usato VM per i test potresti voler provare a usare container e docker è in realtà un ottimo strumento per i test ed è molto più semplice da usare invece di LXC :)


Concordato. Non sono contrario all'uso della finestra mobile o dei suoi vari strumenti di orchestrazione. Li amo anche io. Quello che sto cercando di capire è semplice. Chi possiede la containerizzazione dell'applicazione. Devs? O DevOps? O entrambi ? Se entrambi allora quanto ciascuno dovrebbe contribuire? Quando le cose falliscono a causa della docker o dell'orchestrazione docker, chi dovrebbe essere ritenuto responsabile? Efficienza del codice e aiuto agli sviluppatori per semplificare la loro vita. La mia domanda è propensa al ruolo di un individuo piuttosto che alla tecnologia stessa.
Abhay Pai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.