Min çawa Docker di hundurê Docker de rêve kir û çi jê derket

Silav hemû! Di wî de gotara berê, Min soz da ku ez li ser xebitandina Docker li Docker û aliyên pratîkî yên karanîna vê dersê biaxivim. Dem dema soza xwe ye. Pêşkêşkarek bi ezmûn dê belkî îtiraz bike ku yên ku hewceyê Docker-ê di hundurê Docker de ne, tenê soketa daemonê Docker ji mêvandarê berbi konteynirê vedike û ev ê di 99% bûyeran de bes be. Lê lez nekin ku çerezan bavêjin min, ji ber ku em ê li ser bi rastî Docker di hundurê Docker de biaxivin. Vê çareseriyê gelek serîlêdanên gengaz hene û ev gotar li ser yek ji wan e, ji ber vê yekê rûnin û destên xwe li ber xwe rast bikin.

Min çawa Docker di hundurê Docker de rêve kir û çi jê derket

Destpêka

Hemî êvarek baranê ya Îlonê dest pê kir dema ku min makîneya ku min bi 5 $ kirê kiribû li ser Okyanûsa dîjîtal paqij dikir, ku ji ber vê yekê ku Docker hemî 24 gigabayt cîhê dîska berdest bi wêne û konteynerên xwe tije kiribû, cemidandibû. Xemgîn ev bû ku hemî van wêne û konteyneran dereng bûn û tenê ji bo ceribandina performansa serîlêdana min her carê ku guhertoyek nû ya pirtûkxaneyek an çarçoveyek hate berdan hewce bûn. Min hewl da ku nivîsarên şêlê binivîsim û bernameyek kronîk saz bikim da ku çopê paqij bikim, lê ew ne alîkar bû: her carê ku ew neçar diqede bi xwarina cîhê dîska servera min û daliqandina serverê (bi çêtirîn). Di deverekê de, ez rastî gotarek hatim ka meriv çawa Jenkins di konteynerek de dimeşîne û meriv çawa dikare boriyên avahîsaziyê bi navgîniya soketek docker daemon ku tê de tê şandin biafirîne û jê bibe. Min ji ramanê hez kir, lê min biryar da ku ez hê pêşdetir biçim û hewl bidim ku rasterast Docker di hundurê Docker-ê de bimeşîne. Wê demê, ji min re çareseriyek bi tevahî mentiqî xuya bû ku ez wêneyên Docker dakêşim û ji bo hemî serîlêdanên ku ez ji bo ceribandinê di hundurê konteynirek din de hewce dikim konteyneran biafirînim (ka em jê re bibêjin konteynirek qonaxek). Fikir ev bû ku meriv konteynirek bi ala -rm dest pê bike, ku gava ku were sekinandin bixwe hemî konteynerê û hemî naveroka wê jê dibe. Min wêneya Docker ji Docker bixwe (https://hub.docker.com/_/docker), lê ew pir giran bû û min çu carî nekaribû ku ew bi awayê ku ez jê re hewce dikim bixebitim û min dixwest ez bixwe herim rê.

Bikaranînî. Cones

Min dest pê kir ku konteynir bi awayê ku ez hewce bikim bixebitim û ceribandinên xwe domandim, ku di encamê de bi jimarek kulîlkan derket. Encama êşkenceya min algorîtmaya jêrîn bû:

  1. Em konteynera Docker di moda înteraktîf de dest pê dikin.

    docker run --privileged -it docker:18.09.6

    Bala xwe bidin guhertoya konteynerê, gavê rast an çepê biavêjin û DinD-ya we dibe kulîlk. Bi rastî, gava ku guhertoyek nû tê berdan, tişt pir caran dişkînin.
    Divê em demildest bikevin şêlê.

  2. Em hewl didin ku fêr bibin ka kîjan konteyneran dimeşîne (Bersiv: tune), lê bila em bi her awayî fermanê bimeşînin:

    docker ps

    Hûn ê hinekî şaş bimînin, lê derket holê ku daemonê Docker ne jî dimeşe:

    error during connect: Get http://docker:2375/v1.40/containers/json: dial tcp: lookup docker on 
    192.168.65.1:53: no such host

  3. Ka em xwe bi rê ve bibin:

    dockerd &

    Serpêhatiyek din a ne xweş:

    failed to start daemon: Error initializing network controller: error obtaining controller instance: failed 
    to create NAT chain DOCKER: Iptables not found

  4. Pakêtên iptables û bash saz bikin (her tişt ji karkirina di bash de ji sh-ê xweştir e):

    apk add --no-cache iptables bash

  5. Ka em bash bidin destpêkirin. Di dawiyê de em vegeriyan şêlê asayî

  6. Ka em hewl bidin ku Docker dîsa dest pê bikin:

    dockerd &

    Divê em pelgeyek dirêj a têketinê bibînin ku bi dawî dibe:

    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

  7. Enter çap bike. Em dîsa vegeriyan bash.

Ji niha û pê ve, em dikarin hewl bidin ku konteynerên din di hundurê konteynera xweya Docker de bidin destpêkirin, lê heke em bixwazin konteynirek din a Docker di hundurê konteynera xweya Docker de derxînin an tiştek xelet derkeve û konteynir têk bibe? Ji nû ve dest pê bikin.

Xwedî konteynera DinD û ceribandinên nû

Min çawa Docker di hundurê Docker de rêve kir û çi jê derket
Ji bo ku ez gavên jorîn careke din dubare nekim, min konteynera xwe ya DinD çêkir:

https://github.com/alekslitvinenk/dind

Çareseriya DinD-ya xebitandinê ji min re şiyan da ku ez Docker-ê di hundurê Docker-ê de vegerî bimeşînim û ceribandinên bêtir serpêhatî bikim.
Ez ê ceribandinek wusa (serketî) ya bi xebitandina MySQL û Nodejs naha vebêjim.
Yê herî bêsebir dikare bibîne ka li vir çawa bû

Ji bila dest bi dest pê bikin:

  1. Em DinD di moda înteraktîf de dest pê dikin. Di vê guhertoya DinD-ê de, pêdivî ye ku em bi destan nexşeya hemî portên ku konteynerên zarokên me dikarin bikar bînin (ez berê li ser vê yekê dixebitim)

    docker run --privileged -it 
    -p 80:8080 
    -p 3306:3306 
    alekslitvinenk/dind

    Em dikevin nav baxçê, ji wir em dikarin tavilê dest bi avêtina konteynerên zarokan bikin.

  2. MySQL dest pê bikin:

    docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql

  3. Em bi databasê re bi heman rengî ve girêdidin ku em ê bi herêmî ve girêbidin. Werin em piştrast bikin ku her tişt dixebite.

  4. Konteynera duyemîn dest pê bikin:

    docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server

    Ji kerema xwe not bikin ku nexşeya portê dê tam be 8080:8080, ji ber ku me berê porta 80-ê ji mêvandar heya konteynera dêûbavê berbi porta 8080-ê ve nexşandiye.

  5. Em di gerokê de diçin localhost-ê, pê ewle bin ku server bersivê dide "Hello World!"

Di doza min de, ceribandina bi konteynerên hêlînkirî yên Docker re pir erênî derket û ez ê pêşvebirina projeyê bidomînim û wê ji bo qonaxkirinê bikar bînim. Ji min re xuya dike ku ev çareseriyek ji Kubernetes û Jenkins X pir siviktir e. Lê ev nêrîna min a subjektîf e.

Ez difikirim ku ew hemî ji bo gotara îro ye. Di gotara din de ez ê bi hûrgulî ceribandinên bi xebitandina Docker-ê li Docker-ê vegerî û lêxistina pelrêçan li kûrahiya konteynerên hêlîn vebêjim.

PS Ger hûn vê projeyê bikêr dibînin, ji kerema xwe stêrkek li ser GitHub bidin, wê bişkînin û ji hevalên xwe re bêjin.

Edit1 Çewtiyên rast kirin, li ser 2 vîdyoyan sekinîn

Source: www.habr.com

Add a comment