Pehea wau i holo ai iā Docker i loko o Docker a me ka mea i puka mai

Aloha kākou! I kona ʻatikala mua, Ua hoʻohiki wau e kamaʻilio e pili ana i ka holo ʻana iā Docker ma Docker a me nā ʻano hana o ka hoʻohana ʻana i kēia haʻawina. ʻO ka manawa kēia e mālama ai i kāu ʻōlelo hoʻohiki. E kūʻē paha kahi devopser ʻike i ka poʻe e pono ai iā Docker i loko o Docker e hoʻouna wale i ka Docker daemon socket mai ka mea hoʻokipa i loko o ka pahu a lawa kēia i 99% o nā hihia. Akā, mai wikiwiki e hoʻolei i nā kuki iaʻu, no ka mea, e kamaʻilio mākou e pili ana i ka holo maoli ʻana iā Docker i loko o Docker. He nui nā noi i hiki i kēia hopena a pili kēia ʻatikala i kekahi o lākou, no laila e noho i hope a hoʻopololei i kou mau lima i mua ou.

Pehea wau i holo ai iā Docker i loko o Docker a me ka mea i puka mai

ʻO ka hoʻomaka

Ua hoʻomaka ia ma ke ahiahi ua ua Sepatemaba i koʻu hoʻomaʻemaʻe ʻana i ka mīkini aʻu i hoʻolimalima ai no $5 ma Digital Ocean, ua paʻa i ka hau ma muli o ka hoʻopiha ʻana o Docker i nā 24 gigabytes o nā wahi disk i loaʻa me kāna mau kiʻi a me nā ipu. ʻO ka mea hoʻohenehene, ʻo kēia mau kiʻi a me nā ipu hao he mea kuewa wale nō a pono e hoʻāʻo wale i ka hana o kaʻu noi i kēlā me kēia manawa i hoʻokuʻu ʻia kahi mana hou o kahi waihona a i ʻole ka framework. Ua ho'āʻo wau e kākau i nā ʻatikala shell a hoʻonohonoho i kahi papa manawa cron e hoʻomaʻemaʻe i ka ʻōpala, akā ʻaʻole ia i kōkua: i kēlā me kēia manawa i pau ʻole me ka ʻai ʻia ʻana o ka wahi disk o kaʻu kikowaena a ke kau nei ke kikowaena (ʻoi aku ka maikaʻi). I kekahi manawa, ua loaʻa iaʻu kahi ʻatikala e pili ana i ka holo ʻana iā Jenkins i loko o kahi pahu a pehea e hiki ai iā ia ke hana a holoi i nā pipelines ma o kahi docker daemon socket i hoʻouna ʻia i loko. Ua makemake au i ka manaʻo, akā ua hoʻoholo wau e hele hou a hoʻāʻo e hoʻokolohua me ka holo pololei ʻana iā Docker i loko o Docker. I kēlā manawa, manaʻo wau he hopena kūpono loa e hoʻoiho i nā kiʻi Docker a hana i nā ipu no nā noi āpau aʻu e pono ai no ka hoʻāʻo ʻana i loko o kahi pahu ʻē aʻe (e kapa mākou he pahu staging). ʻO ka manaʻo e hoʻomaka i kahi pahu hoʻokūkū me ka hae -rm, e hoʻopau koke i ka pahu holoʻokoʻa a me nā mea āpau i ka wā e pani ʻia ai. Hoʻopili wau me ke kiʻi Docker mai Docker ponoʻī (https://hub.docker.com/_/docker), akā ua lilo ia i mea paʻakikī loa a ʻaʻole hiki iaʻu ke hana e like me kaʻu e pono ai a makemake wau e hele i ke ala āpau iaʻu iho.

E hoʻomaʻamaʻa. Cones

Ua hoʻomaka wau e hana i ka pahu e like me kaʻu e pono ai a hoʻomau i kaʻu mau hoʻokolohua, a ua hopena i ka nui o nā ʻōpuʻu. ʻO ka hopena o koʻu hoʻomāinoino ʻana iā ia iho ka algorithm penei:

  1. Hoʻomaka mākou i ka pahu Docker ma ke ʻano pāʻani.

    docker run --privileged -it docker:18.09.6

    E noʻonoʻo i ke ʻano o ka ipu, e neʻe i ka ʻākau a i ʻole hema a lilo kāu DinD i ʻukena. ʻOiaʻiʻo, haki pinepine nā mea ke hoʻokuʻu ʻia kahi mana hou.
    Pono mākou e komo koke i loko o ka pūpū.

  2. Ke hoʻāʻo nei mākou e ʻike i nā pahu e holo nei (Pane: ʻaʻohe), akā e holo mākou i ke kauoha:

    docker ps

    E kāhāhā iki ʻoe, akā ʻike ʻia ʻaʻole holo ka Docker daemon:

    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. E holo kakou ia kakou iho:

    dockerd &

    ʻO kekahi mea kupanaha maikaʻi ʻole:

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

  4. E hoʻouka i nā iptables a me nā pūʻolo bash (ʻoi aku ka maikaʻi o nā mea āpau i ka hana ma ka bash ma mua o ka sh):

    apk add --no-cache iptables bash

  5. E hoʻomaka kākou i ka bash. ʻO ka hope, hoʻi mākou i ka pūpū maʻamau

  6. E hoʻāʻo e hoʻomaka hou iā Docker:

    dockerd &

    Pono mākou e ʻike i kahi pepa lōʻihi o nā lāʻau e pau ana me:

    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. E kaomi Enter. Ua hoʻi mākou i ka bash.

Mai kēia manawa, hiki iā mākou ke hoʻāʻo e hoʻolauna i nā pahu ʻē aʻe i loko o kā mākou pahu Docker, akā pehea inā makemake mākou e hoʻolauna i kahi pahu Docker hou i loko o kā mākou pahu Docker a i ʻole kekahi mea i hewa a hāʻule ka pahu? E hoʻomaka hou i nā mea a pau.

ʻO ka ipu DinD ponoʻī a me nā hoʻokolohua hou

Pehea wau i holo ai iā Docker i loko o Docker a me ka mea i puka mai
I mea e pale ai i ka hana hou ʻana i nā ʻanuʻu ma luna aʻe, ua hana wau i kaʻu pahu DinD ponoʻī:

https://github.com/alekslitvinenk/dind

ʻO ka hoʻonā DinD hana i hāʻawi iaʻu i ka hiki ke holo Docker i loko o Docker me ka hana hou a hana i nā hoʻokolohua hou aku.
E wehewehe ana au i kahi hoʻokolohua (kūpono) me ka holo ʻana i MySQL a me Nodejs i kēia manawa.
Hiki i ka poʻe hoʻomanawanui ke ʻike i ke ʻano ma ʻaneʻi

No laila, e hoʻomaka:

  1. Hoʻomaka mākou iā DinD ma ke ʻano pāʻani. Ma kēia mana o DinD, pono mākou e palapala lima lima i nā awa a pau i hiki i kā mākou mau ipu keiki ke hoʻohana (Ke hana nei au i kēia)

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

    Hele mākou i loko o ka bash, mai kahi e hiki ai iā mākou ke hoʻomaka koke i ka hoʻokuʻu ʻana i nā ipu keiki.

  2. E hoʻomaka i ka MySQL:

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

  3. Hoʻohui mākou i ka waihona ma ke ʻano like me ka hoʻopili ʻana iā ia ma ka ʻāina. E hōʻoia kākou e holo pono nā mea a pau.

  4. E hoʻokuʻu i ka pahu lua:

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

    E ʻoluʻolu e hoʻomaopopo pono i ka palapala ʻāina awa 8080:8080, no ka mea, ua hoʻopaʻa mua mākou i ke awa 80 mai ka mea hoʻokipa i ka ipu makua i ke awa 8080.

  5. Hele mākou i ka localhost i ka polokalamu kele pūnaewele, e hōʻoia i ka pane ʻana o ke kikowaena "Hello World!"

I koʻu hihia, ua maikaʻi ka hoʻokolohua me nā pahu Docker nested a e hoʻomau wau i ka hoʻomohala ʻana i ka papahana a hoʻohana iā ia no ka hoʻokūkū. Me he mea lā he ʻoi aku ka māmā o kēia ma mua o Kubernetes a me Jenkins X. Akā ʻo koʻu manaʻo kumu kēia.

Manaʻo wau ʻo ia wale nō ka ʻatikala o kēia lā. Ma ka ʻatikala aʻe e wehewehe au i nā hoʻokolohua kikoʻī me ka holo ʻana o Docker i Docker a me ka hoʻouka ʻana i nā papa kuhikuhi hohonu i loko o nā pahu nested.

PS Inā ʻike ʻoe he pono kēia papahana, e ʻoluʻolu e hāʻawi iā ia i hōkū ma GitHub, e ʻoki a haʻi i kāu mau hoaaloha.

Edit1 Hoʻoponopono ʻia nā hewa, kālele ʻia ma 2 wikiō

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka