Moien alleguer! A sengem
Den Ufank
Et huet alles ugefaang op engem verreenten Septemberowend, wéi ech d'Maschinn gebotzt hunn, déi ech fir $ 5 op Digital Ocean gelount hunn, déi gefruer gouf wéinst der Tatsaach datt Docker all 24 Gigabyte vun verfügbaren Disk Space mat senge Biller a Container gefëllt huet. D'Ironie war datt all dës Biller a Container transient waren a waren nëmme gebraucht fir d'Performance vu menger Applikatioun ze testen all Kéier wann eng nei Versioun vun enger Bibliothéik oder Kader verëffentlecht gouf. Ech hu probéiert Shell-Skripte ze schreiwen an e Cron-Zäitplang opzestellen fir Gerempels ze botzen, awer et huet net gehollef: all Kéier wann et zwangsleefeg opgehalen ass, datt mäi Server seng Disk Space giess gouf an de Server hänkt (am beschten). Irgendwann sinn ech en Artikel begéint iwwer wéi een Jenkins an engem Container ausféiert a wéi et ka bauen a läschen Pipelines duerch en Docker Daemon Socket, deen an et fortgeet. Ech hunn d'Iddi gär, awer ech hu beschloss méi wäit ze goen an ze experimentéieren mat direkten Docker bannent Docker ze lafen. Zu där Zäit huet et mir eng komplett logesch Léisung geschéngt fir Docker Biller erofzelueden an Container fir all Uwendungen ze kreéieren déi ech gebraucht hunn fir an engem anere Container ze testen (loosst eis et e Staging Container nennen). D'Iddi war en Inszenéierungscontainer mam Fändel -rm ze starten, deen automatesch de ganze Container an all säin Inhalt läscht wann en gestoppt gëtt. Ech hunn mam Docker Bild vum Docker selwer gepaff (
Praxis. Kegel
Ech hu virgestallt fir de Container ze maachen wéi ech gebraucht hunn an hunn meng Experimenter weidergefouert, wat zu enger Onmass vu Knospe gefouert huet. D'Resultat vu menger Selbstfolter war de folgenden Algorithmus:
-
Mir starten den Docker Container am interaktiven Modus.
docker run --privileged -it docker:18.09.6
Opgepasst op d'Versioun vum Container, Schrëtt riets oder lénks an Är DinD gëtt an e Kürbis. Tatsächlech briechen d'Saachen zimlech dacks wann eng nei Versioun verëffentlecht gëtt.
Mir mussen direkt an d'Schuel kommen. -
Mir probéieren erauszefannen, wéi eng Container lafen (Äntwert: keng), awer loosst eis de Kommando souwisou ausféieren:
docker ps
Dir wäert e bëssen iwwerrascht sinn, awer et stellt sech eraus datt den Docker Daemon net emol leeft:
error during connect: Get http://docker:2375/v1.40/containers/json: dial tcp: lookup docker on 192.168.65.1:53: no such host
-
Loosst eis et selwer lafen:
dockerd &
Eng aner onsympathesch Iwwerraschung:
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Iptables not found
-
Installéiert d'iptables a bash Packagen (alles ass méi agreabel fir am bash ze schaffen wéi am sh):
apk add --no-cache iptables bash
-
Loosst eis bash starten. Endlech si mir erëm an der üblecher Schuel
-
Loosst eis probéieren den Docker erëm ze starten:
dockerd &
Mir sollten e laange Blat vu Logbicher gesinn, déi mat:
INFO[2019-11-25T19:51:19.448080400Z] Daemon has completed initialization INFO[2019-11-25T19:51:19.474439300Z] API listen on /var/run/docker.sock
-
Press Enter. Mir sinn zréck an de Bash.
Vun elo un kënne mir probéieren aner Container an eisem Docker Container ze lancéieren, awer wat wa mir en aneren Docker Container an eisem Docker Container wëllen starten oder eppes geet falsch an de Container crasht? Fänkt alles erëm un.
Eegent DinD Container an nei Experimenter
Fir ze vermeiden déi uewe genannte Schrëtt ëmmer erëm ze widderhuelen, hunn ech mäin eegenen DinD Container erstallt:
Déi funktionéierend DinD Léisung huet mir d'Fäegkeet ginn Docker bannent Docker rekursiv ze lafen a méi abenteuerlech Experimenter ze maachen.
Ech wäert een esou (erfollegräich) Experiment beschreiwen mam Lafen MySQL an Nodejs elo.
Déi Ongedëllegst ka gesinn wéi et hei war
Also, loosst eis ufänken:
-
Mir starten DinD am interaktive Modus. An dëser Versioun vum DinD musse mir all d'Ports manuell kartéieren déi eis Kannerbehälter kënne benotzen (ech schaffen schonn un dësem)
docker run --privileged -it -p 80:8080 -p 3306:3306 alekslitvinenk/dind
Mir kommen an de Bash, vu wou mir direkt kënnen ufänken Kannercontainer ze lancéieren.
-
MySQL starten:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql
-
Mir konnektéieren op d'Datebank op déiselwecht Manéier wéi mir lokal dorop verbannen. Loosst eis sécherstellen datt alles funktionnéiert.
-
Start den zweeten Container:
docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server
Notéiert w.e.g. datt d'Portmapping genee wäert sinn 8080:8080, well mir schonn den Hafen 80 vum Host an den Elterendeel op den Hafen 8080 mapéiert hunn.
-
Mir ginn op localhost am Browser, gitt sécher datt de Server "Hallo Welt!"
A mengem Fall ass d'Experiment mat Nested Docker Container ganz positiv erausgestallt an ech wäert de Projet weider entwéckelen an et fir d'Inszenéierung benotzen. Et schéngt mir datt dëst eng vill méi liicht Léisung ass wéi Kubernetes a Jenkins X. Awer dëst ass meng subjektiv Meenung.
Ech mengen dat ass alles fir den Artikel vun haut. Am nächsten Artikel wäert ech méi detailléiert Experimenter beschreiwen mat Docker rekursiv an Docker ze lafen an Verzeechnes déif an nested Container ze montéieren.
PS Wann Dir dëse Projet nëtzlech fannt, gitt w.e.g. e Stär op GitHub, gitt et a sot Äre Frënn.
Editéieren 1 Korrigéiert Feeler, fokusséiert op 2 Videoen
Source: will.com