Carane aku mlayu Docker nang Docker lan apa metu saka iku

Halo kabeh! Ing dheweke artikel sadurunge, Aku janji kanggo pirembagan bab mlaku Docker ing Docker lan aspèk praktis nggunakake pawulangan iki. Wis wayahe mblenjani janji. Devopser sing berpengalaman bisa uga mbantah manawa sing butuh Docker ing Docker mung nerusake soket daemon Docker saka host menyang wadhah lan iki bakal cukup ing 99% kasus. Nanging aja cepet-cepet mbuwang cookie, amarga kita bakal ngomong babagan mlaku Docker ing Docker. Solusi iki nduweni akeh aplikasi sing bisa ditindakake lan artikel iki babagan salah sijine, mula lungguha lan lurusake tangan sampeyan ing ngarep.

Carane aku mlayu Docker nang Docker lan apa metu saka iku

Начало

Iku kabeh diwiwiti ing wayah sore September udan nalika aku ngresiki mesin sing disewa kanggo $ 5 ing Digital Ocean, sing beku amarga Docker wis ngisi kabeh 24 gigabyte ruang disk sing kasedhiya karo gambar lan wadhah. Ironi iku kabeh gambar lan kontaner iki sak wentoro lan mung perlu kanggo nyoba kinerja aplikasi saben-saben versi anyar saka perpustakaan utawa framework dirilis. Aku nyoba nulis skrip cangkang lan nyetel jadwal cron kanggo ngresiki sampah, nanging ora mbantu: saben-saben mesthi rampung karo ruang disk serverku dipangan lan server digantung (paling apik). Ing sawetara titik, aku nemokake artikel babagan carane mbukak Jenkins ing wadhah lan carane bisa nggawe lan mbusak pipa mbangun liwat soket daemon docker sing diterusake. Aku disenengi idea, nanging aku mutusakΓ© kanggo pindhah luwih lan nyoba kanggo eksprimen karo langsung mbukak Docker nang Docker. Ing wektu iku, misale jek dadi solusi sing logis kanggo ndownload gambar Docker lan nggawe wadhah kanggo kabeh aplikasi sing dibutuhake kanggo nyoba ing wadhah liyane (ayo diarani wadhah pementasan). Ide iki kanggo miwiti wadhah pementasan kanthi bendera -rm, sing kanthi otomatis mbusak kabeh wadhah lan kabeh isine nalika mandheg. Aku tinkered karo gambar Docker saka Docker dhewe (https://hub.docker.com/_/docker), nanging ternyata banget rumit lan aku ora nate bisa nindakake kanthi cara sing dibutuhake lan aku pengin lunga kabeh.

Laku. Cones

Aku metu kanggo nggawe wadhah bisa digunakake kanthi cara sing dibutuhake lan nerusake eksperimen, sing ngasilake akeh tunas. Asil saka nyiksa dhewe yaiku algoritma ing ngisor iki:

  1. Kita miwiti wadhah Docker ing mode interaktif.

    docker run --privileged -it docker:18.09.6

    Priksa manawa versi wadhah kasebut, langkah nengen utawa ngiwa lan DinD sampeyan dadi waluh. Nyatane, prekara-prekara kasebut asring rusak nalika versi anyar dirilis.
    Kita kudu langsung mlebu ing cangkang.

  2. Kita nyoba ngerteni kontainer sing mlaku (Jawaban: ora ana), nanging ayo nglakoni perintah kasebut:

    docker ps

    Sampeyan bakal rada kaget, nanging ternyata daemon Docker ora mlaku:

    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. Ayo mlaku dhewe:

    dockerd &

    Kejutan liyane sing ora nyenengake:

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

  4. Instal paket iptables lan bash (kabeh luwih nyenengake kanggo nggarap bash tinimbang ing sh):

    apk add --no-cache iptables bash

  5. Ayo miwiti bash. Akhire kita bali ing Nihan biasanipun

  6. Ayo nyoba miwiti Docker maneh:

    dockerd &

    Kita kudu ndeleng lembaran log dawa sing diakhiri:

    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. Pencet Enter. Kita bali ing bash.

Wiwit saiki, kita bisa nyoba ngluncurake wadhah liyane ing wadhah Docker, nanging kepiye yen pengin mbukak wadhah Docker liyane ing wadhah Docker utawa ana sing salah lan wadhah kasebut nabrak? Mulai kabeh maneh.

Wadhah DinD dhewe lan eksperimen anyar

Carane aku mlayu Docker nang Docker lan apa metu saka iku
Supaya ora mbaleni langkah-langkah ing ndhuwur, aku nggawe wadah DinD dhewe:

https://github.com/alekslitvinenk/dind

Solusi DinD sing digunakake menehi kemampuan kanggo mbukak Docker ing Docker kanthi rekursif lan nindakake eksperimen sing luwih petualangan.
Aku bakal njlèntrèhaké siji eksperimen (sukses) karo mlaku MySQL lan Nodejs saiki.
Sing paling ora sabar bisa ndeleng kepiye ing kene

Dadi, ayo miwiti:

  1. Kita miwiti DinD ing mode interaktif. Ing versi DinD iki, kita kudu nggawe peta kanthi manual kabeh port sing bisa digunakake kanggo wadhah anak (aku wis nggarap iki)

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

    We njaluk menyang bash, saka ngendi kita bisa langsung miwiti mbukak wadhah anak.

  2. Bukak MySQL:

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

  3. Kita nyambung menyang database kanthi cara sing padha kaya sing bakal kita sambungake sacara lokal. Ayo dadi manawa kabeh bisa.

  4. Bukak wadhah kapindho:

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

    Elinga yen pemetaan port bakal persis 8080:8080, amarga kita wis nggawe peta port 80 saka host menyang wadhah induk menyang port 8080.

  5. Kita pindhah menyang localhost ing browser, priksa manawa server nanggapi "Hello World!"

Ing kasusku, eksperimen karo kontaner Docker nested dadi cukup positif lan aku bakal terus ngembangake proyek kasebut lan digunakake kanggo pementasan. Iku misale jek kula sing iki solusi luwih entheng tinimbang Kubernetes lan Jenkins X. Nanging iki mratelakake panemume subyektif.

Aku kira mung kanggo artikel dina iki. Ing artikel sabanjure, aku bakal njlèntrèhaké kanthi luwih rinci eksperimen karo Docker sing mlaku kanthi rekursif ing Docker lan masang direktori ing jero wadhah bersarang.

PS Yen sampeyan nemokake proyek iki migunani, wenehi lintang ing GitHub, garpu lan marang kanca-kanca.

Sunting1 Kesalahan sing didandani, fokus ing 2 video

Source: www.habr.com

Add a comment