Bawo ni MO ṣe sare Docker inu Docker ati kini o jade ninu rẹ

Bawo ni gbogbo eniyan! Ninu tirẹ ti tẹlẹ article, Mo ṣe ileri lati sọrọ nipa ṣiṣe Docker ni Docker ati awọn aaye ti o wulo ti lilo ẹkọ yii. O to akoko lati mu ileri rẹ ṣẹ. Olufokansin ti o ni iriri yoo ṣee ṣe tako pe awọn ti o nilo Docker inu Docker nirọrun dari socket daemon Docker lati inu agbalejo sinu apoti ati pe eyi yoo to ni 99% awọn ọran. Ṣugbọn maṣe yara lati jabọ awọn kuki si mi, nitori a yoo sọrọ nipa ṣiṣe Docker gangan ni inu Docker. Ojutu yii ni ọpọlọpọ awọn ohun elo ti o ṣeeṣe ati pe nkan yii jẹ nipa ọkan ninu wọn, nitorinaa joko sẹhin ki o tọ awọn apa rẹ ni iwaju rẹ.

Bawo ni MO ṣe sare Docker inu Docker ati kini o jade ninu rẹ

Начало

Gbogbo rẹ bẹrẹ ni irọlẹ Oṣu Kẹsan ti ojo kan nigbati Mo n nu ẹrọ ti Mo ya fun $ 5 lori Digital Ocean, eyiti o di didi nitori otitọ pe Docker ti kun gbogbo 24 gigabytes ti aaye disk ti o wa pẹlu awọn aworan ati awọn apoti rẹ. Ibanujẹ ni pe gbogbo awọn aworan ati awọn apoti wọnyi jẹ igba diẹ ati pe wọn nilo nikan lati ṣe idanwo iṣẹ ohun elo mi ni gbogbo igba ti ẹya tuntun ti ile-ikawe tabi ilana ti tu silẹ. Mo gbiyanju kikọ awọn iwe afọwọkọ ikarahun ati ṣeto iṣeto cron kan lati sọ idoti di mimọ, ṣugbọn ko ṣe iranlọwọ: ni gbogbo igba ti o daju pe o pari pẹlu aaye disk olupin mi ti n jẹun ati olupin ti o wa ni adiye (ti o dara julọ). Ni aaye kan, Mo wa nkan kan nipa bi o ṣe le ṣiṣe Jenkins ninu apo eiyan kan ati bii o ṣe le ṣẹda ati paarẹ awọn opo gigun ti ile nipasẹ iho docker daemon ti a firanṣẹ siwaju sinu rẹ. Mo fẹran imọran naa, ṣugbọn Mo pinnu lati lọ siwaju ati gbiyanju lati ṣe idanwo pẹlu ṣiṣe Docker taara inu Docker. Ni akoko yẹn, o dabi fun mi ni ojutu ti oye patapata lati ṣe igbasilẹ awọn aworan Docker ati ṣẹda awọn apoti fun gbogbo awọn ohun elo ti Mo nilo fun idanwo inu apo eiyan miiran (jẹ ki a pe eiyan itage). Èrò náà ni láti bẹ̀rẹ̀ àpótí ìtòlẹ́sẹẹsẹ kan pẹ̀lú àsíá -rm, èyí tí yóò pa gbogbo àpótí náà àti gbogbo ohun tí ó wà nínú rẹ̀ rẹ́ láìdábọ̀ nígbà tí ó bá dúró. Mo ti tẹ pẹlu aworan Docker lati Docker funrararẹ (https://hub.docker.com/_/docker), sugbon o wa ni jade lati wa ni ju cumbersome ati Emi ko isakoso lati gba o lati sise ni ọna ti mo ti nilo o ati ki o Mo fe lati lọ gbogbo awọn ọna ara mi.

Iwaṣe. Cones

Mo pinnu lati jẹ ki apoti naa ṣiṣẹ ni ọna ti Mo nilo ati tẹsiwaju awọn idanwo mi, eyiti o yọrisi ọpọlọpọ awọn eso. Abajade ijiya-ara mi jẹ algorithm atẹle:

  1. A ṣe ifilọlẹ apoti Docker ni ipo ibaraenisepo.

    docker run --privileged -it docker:18.09.6

    San ifojusi si ẹya ti eiyan, igbesẹ sọtun tabi sosi ati pe DinD rẹ yipada si elegede kan. Ni otitọ, awọn nkan bajẹ ni igbagbogbo nigbati ẹya tuntun ba ti tu silẹ.
    A gbọdọ wọle lẹsẹkẹsẹ sinu ikarahun naa.

  2. A n gbiyanju lati wa iru awọn apoti ti nṣiṣẹ (Idahun: ko si), ṣugbọn jẹ ki a ṣiṣẹ aṣẹ naa lonakona:

    docker ps

    Iwọ yoo jẹ iyalẹnu diẹ, ṣugbọn o wa ni pe Docker daemon ko paapaa nṣiṣẹ:

    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. Jẹ ki a ṣiṣẹ funrararẹ:

    dockerd &

    Iyalẹnu miiran ti ko dun:

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

  4. Fi sori ẹrọ awọn iptables ati awọn idii bash (ohun gbogbo jẹ igbadun diẹ sii lati ṣiṣẹ ni bash ju ni sh):

    apk add --no-cache iptables bash

  5. Jẹ ki a ṣe ifilọlẹ bash. Níkẹyìn a ba wa pada ni ibùgbé ikarahun

  6. Jẹ ki a gbiyanju lati ṣe ifilọlẹ Docker lẹẹkansi:

    dockerd &

    A yẹ ki o wo iwe gigun ti awọn igi ti o pari pẹlu:

    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. Tẹ Tẹ. A pada wa ninu bash.

Lati isisiyi lọ, a le gbiyanju lati ṣe ifilọlẹ awọn apoti miiran ninu apo eiyan Docker wa, ṣugbọn kini ti a ba fẹ ṣe ifilọlẹ apoti Docker miiran ninu apo eiyan Docker wa tabi nkan ti ko tọ ati pe eiyan naa kọlu? Bẹrẹ gbogbo lẹẹkansi.

Ti ara DinD eiyan ati titun adanwo

Bawo ni MO ṣe sare Docker inu Docker ati kini o jade ninu rẹ
Lati yago fun atunwi awọn igbesẹ ti o wa loke leralera, Mo ṣẹda apoti DinD ti ara mi:

https://github.com/alekslitvinenk/dind

Ojutu DinD ti n ṣiṣẹ fun mi ni agbara lati ṣiṣe Docker inu Docker loorekoore ati ṣe awọn adanwo adventurous diẹ sii.
Emi yoo ṣe apejuwe ọkan iru (aṣeyọri) adanwo pẹlu ṣiṣe MySQL ati Nodejs ni bayi.
Awọn julọ suuru le ri bi o ti wà nibi

Nitorinaa, jẹ ki a bẹrẹ:

  1. A ṣe ifilọlẹ DinD ni ipo ibaraenisepo. Ninu ẹya DinD yii, a nilo lati ṣe maapu gbogbo awọn ebute oko oju omi ti awọn apoti ọmọ wa le lo (Mo n ṣiṣẹ tẹlẹ lori eyi)

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

    A gba sinu bash, lati ibi ti a ti le lẹsẹkẹsẹ bẹrẹ ifilọlẹ awọn apoti ọmọ.

  2. Lọlẹ MySQL:

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

  3. A sopọ si ibi ipamọ data ni ọna kanna bi a ṣe le sopọ si agbegbe. Jẹ ki a rii daju pe ohun gbogbo ṣiṣẹ.

  4. Lọlẹ apoti keji:

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

    Jọwọ ṣe akiyesi pe maapu ibudo yoo jẹ deede 8080:8080, niwon a ti tẹlẹ ya aworan ibudo 80 lati ogun si awọn obi eiyan to ibudo 8080.

  5. A lọ si localhost ninu ẹrọ aṣawakiri, rii daju pe olupin naa dahun “Hello World!”

Ninu ọran mi, idanwo pẹlu awọn apoti Docker itẹ-ẹiyẹ ti jade lati jẹ idaniloju pupọ ati pe Emi yoo tẹsiwaju lati ṣe idagbasoke iṣẹ akanṣe ati lo fun tito. O dabi si mi pe eyi jẹ ojutu iwuwo fẹẹrẹ diẹ sii ju Kubernetes ati Jenkins X. Ṣugbọn eyi ni ero ero-ara mi.

Mo ro pe iyẹn ni gbogbo nkan fun nkan oni. Ninu nkan ti nbọ Emi yoo ṣe apejuwe ni awọn adanwo alaye diẹ sii pẹlu ṣiṣe Docker loorekoore ni Docker ati awọn ilana iṣagbesori jin sinu awọn apoti itẹ-ẹiyẹ.

PS Ti o ba rii pe iṣẹ akanṣe yii wulo, jọwọ fun ni irawọ lori GitHub, fi orita ki o sọ fun awọn ọrẹ rẹ.

Ṣatunkọ1 Awọn aṣiṣe ti a ṣe atunṣe, lojutu lori awọn fidio 2

orisun: www.habr.com

Fi ọrọìwòye kun