E noʻonoʻo pono ma mua o ka hoʻohana ʻana iā Docker-in-Docker no CI a i ʻole ka hoʻāʻo ʻana

E noʻonoʻo pono ma mua o ka hoʻohana ʻana iā Docker-in-Docker no CI a i ʻole ka hoʻāʻo ʻana

ʻO Docker-in-Docker kahi kaiapuni Docker daemon virtualized e holo ana i loko o ka pahu ponoʻī e kūkulu i nā kiʻi pahu. ʻO ke kumu nui o ka hana ʻana iā Docker-in-Docker ʻo ia ke kōkua i ka hoʻomohala ʻana iā Docker ponoʻī. Nui nā poʻe e hoʻohana iā ia e holo iā Jenkins CI. He mea maʻamau kēia i ka wā mua, akā hiki mai nā pilikia e hiki ke pale ʻia ma ke kau ʻana iā Docker i kahi pahu Jenkins CI. Hōʻike kēia ʻatikala iā ʻoe pehea e hana ai i kēia. Inā makemake ʻoe i ka hopena hope me ka ʻole o nā kikoʻī, e heluhelu wale i ka ʻāpana hope o ka ʻatikala, "Hoʻoholo i ka pilikia."

E noʻonoʻo pono ma mua o ka hoʻohana ʻana iā Docker-in-Docker no CI a i ʻole ka hoʻāʻo ʻana

Docker-in-Docker: "Maikaʻi"

ʻOi aku ma mua o ʻelua makahiki i hala aku nei ua hoʻokomo wau i Docker hae -pono a kākau mua o ka dind. ʻO ka pahuhopu ke kōkua i ka hui kumu e hoʻomohala wikiwiki iā Docker. Ma mua o Docker-in-Docker, ua like ke ʻano o ke ʻano hoʻomohala maʻamau:

  • hackity hack;
  • kūkulu;
  • ke hooki nei i kahi daemon Docker e holo ana;
  • hoʻokuʻu i kahi daemon Docker hou;
  • hoao ana;
  • e hana hou i ka pōʻaiapuni.

Inā makemake ʻoe e hana i kahi hui nani a hiki ke hana hou ʻia (ʻo ia hoʻi, i loko o kahi pahu), a laila lilo ia i mea paʻakikī:

  • hackity hack;
  • e hōʻoia e holo ana kahi mana hana o Docker;
  • kūkulu i Docker hou me Docker kahiko;
  • hoʻopau i ka daemon Docker;
  • hoʻomaka i kahi daemon Docker hou;
  • hoao;
  • hoʻopau i ka daemon Docker hou;
  • hana hou.

Me ka hiki ʻana mai o Docker-in-Docker, ua maʻalahi ke kaʻina hana:

  • hackity hack;
  • hui + hoʻomaka i hoʻokahi pae;
  • e hana hou i ka pōʻaiapuni.

ʻAʻole ʻoi aku ka maikaʻi ma kēia ala?

E noʻonoʻo pono ma mua o ka hoʻohana ʻana iā Docker-in-Docker no CI a i ʻole ka hoʻāʻo ʻana

Docker-in-Docker: "ʻino"

Eia naʻe, kū'ē i ka manaʻo nui, ʻaʻole ʻo Docker-in-Docker ʻo 100% hōkū, ponies a me nā unicorns. ʻO kaʻu e ʻōlelo nei he nui nā pilikia e pono ai ka mea hoʻomohala e ʻike.

Одна из них касается LSM (модулей безопасности Linux), таких как AppArmor и SELinux: при запуске контейнера «внутренний Docker“ может попытаться применить профили безопасности, которые будут конфликтовать или запутывать „внешний Docker“. Это самая сложная проблема, которую нужно было решить при попытке объединить исходную реализацию флага –privileged. Мои изменения работали, и все тесты тоже бы прошли на моей машине Debian и тестовых виртуальных машинах Ubuntu, но они бы рухнули и сгорели на машине Майкла Кросби (насколько я помню, у него была Fedora). Я не могу вспомнить точную причину проблемы, но возможно, она возникала потому, что Майк — мудрый человек, который работает с SELINUX=enforce (я использовал AppArmor), и мои изменения не учитывали профили SELinux.

Docker-in-Docker: "ʻino"

ʻO ka lua o ka pilikia me nā mea hoʻokele mālama mālama Docker. Ke holo ʻoe iā Docker-in-Docker, holo ʻo Docker waho ma luna o kahi ʻōnaehana faila maʻamau (EXT4, BTRFS, a i ʻole nā ​​​​mea āu i loaʻa ai) a holo ʻo Docker kūloko ma luna o kahi ʻōnaehana kope-ma-kākau (AUFS, BTRFS, Device Mapper. , etc.). , e pili ana i ka mea i hoʻonohonoho ʻia e hoʻohana i waho Docker). Hoʻokumu kēia i nā hui like ʻole e hana. No ka laʻana, ʻaʻole hiki iā ʻoe ke holo i ka AUFS ma luna o AUFS.

Inā holo ʻoe i ka BTRFS ma luna o ka BTRFS, pono ia e hana i ka wā mua, akā i ka manawa e loaʻa ai nā subvolumes nested, e pau ka holoi ʻana i ka subvolume makua. ʻAʻohe inoa inoa o ka module Mapper, no laila inā e holo ana nā hanana Docker he nui ma ka mīkini hoʻokahi, hiki iā lākou ke ʻike (a hoʻoikaika) i nā kiʻi ma luna o kekahi a me nā mea hoʻihoʻi pahu. He ino keia.

Aia nā hana hoʻoponopono e hoʻoponopono i kēia mau pilikia. No ka laʻana, inā makemake ʻoe e hoʻohana i ka AUFS i loko o Docker i loko, e hoʻohuli wale i ka waihona /var/lib/docker i loko o kahi leo a maikaʻi ʻoe. Ua hoʻohui ʻo Docker i kekahi mau papa inoa kumu i nā inoa target Device Mapper a inā e holo nā kelepona Docker he nui ma ka mīkini hoʻokahi, ʻaʻole lākou e hehi kekahi i kekahi.

Eia naʻe, ʻaʻole maʻalahi kēlā hoʻonohonoho, e like me ka mea e ʻike ʻia mai kēia mau mea nāʻatikala i loko o ka waihona dind ma GitHub.

Docker-in-Docker: Ua ʻoi aku ka ʻino

Pehea e pili ana i ka hale waihona puke? Hiki ke paʻakikī loa kēia. Nīnau pinepine ka poʻe iaʻu "inā wau e holo nei i Docker-in-Docker, pehea wau e hoʻohana ai i nā kiʻi i hoʻokipa ʻia ma kaʻu mea hoʻokipa ma mua o ka huki ʻana i nā mea āpau i koʻu Docker kūloko"?

Ua ho'āʻo kekahi poʻe hoʻoikaika e hoʻopaʻa i /var/lib/docker mai ka mea hoʻokipa i kahi pahu Docker-in-Docker. I kekahi manawa kaʻana like lākou /var/lib/docker me nā pahu he nui.

E noʻonoʻo pono ma mua o ka hoʻohana ʻana iā Docker-in-Docker no CI a i ʻole ka hoʻāʻo ʻana
Makemake ʻoe e hōʻino i kāu ʻikepili? No ka mea ʻo kēia ka mea e hōʻino ai i kāu ʻikepili!

Ua hoʻolālā maikaʻi ʻia ka Docker daemon e loaʻa ke komo kūʻokoʻa i /var/lib/docker. ʻAʻohe mea ʻē aʻe e "hoʻopā, hoʻopaʻa, a hoʻolaha paha" i nā faila Docker i loaʻa i kēia waihona.

No ke aha la keia? No ka mea ʻo ia ka hopena o kekahi o nā haʻawina paʻakikī loa i aʻo ʻia i ka wā e hoʻomohala ana i dotCloud. Ua holo ka mīkini pahu pahu dotCloud ma o ka loaʻa ʻana o nā kaʻina hana he nui e komo i /var/lib/dotcloud i ka manawa like. ʻO nā hoʻopunipuni maalea e like me ka hoʻololi ʻana i nā faila atomic (ma kahi o ka hoʻoponopono ʻana i loko o ka wahi), ka pepa pepa me ka ʻōlelo aʻoaʻo a me nā laka kauoha, a me nā hoʻokolohua ʻē aʻe me nā ʻōnaehana palekana e like me SQLite a me BDB ʻaʻole i hana mau. I ko mākou hoʻolālā hou ʻana i kā mākou mīkini pahu, i lilo i Docker, ʻo kekahi o nā hoʻoholo hoʻolālā nui ʻo ia ka hoʻohui ʻana i nā hana pahu āpau ma lalo o kahi daemon hoʻokahi e hoʻopau i nā mea lapuwale concurrency.

Mai kuhi hewa iaʻu: hiki loa ke hana i kahi mea maikaʻi, hilinaʻi a wikiwiki hoʻi e pili ana i nā kaʻina hana he nui a me ka mana like o kēia wā. Akā ke manaʻo nei mākou he mea maʻalahi a maʻalahi hoʻi e kākau a mālama i ka code me ka hoʻohana ʻana iā Docker ma ke ʻano he mea pāʻani wale nō.

Это означает, что если вы разделяете каталог /var/lib/docker между несколькими экземплярами Docker, у вас будут проблемы. Конечно, это может сработать, особенно на ранних стадиях тестирования. «Слушай, Ма, я могу «докером» запустить ubuntu!» Но попробуйте сделать что-то более сложное, например, вытащить один и тот же образ из двух разных экземпляров, и вы увидите, как пылает мир.

ʻO ke ʻano kēia inā hana kāu ʻōnaehana CI i ke kūkulu ʻana a kūkulu hou, i kēlā me kēia manawa e hoʻomaka hou ʻoe i kāu pahu Docker-in-Docker, pilikia ʻoe e hoʻolei i kahi nuke i loko o kāna cache. ʻAʻole maikaʻi loa kēia!

ʻO ka pilikia

E hoʻi kākou i hope. Makemake maoli ʻoe iā Docker-in-Docker a i ʻole makemake ʻoe e holo i Docker a kūkulu a holo i nā ipu a me nā kiʻi mai kāu ʻōnaehana CI aʻo kēlā ʻōnaehana CI ponoʻī i loko o kahi pahu?

Makemake au i ka hapa nui o ka poʻe i ka koho hope, ʻo ia hoʻi makemake lākou i kahi ʻōnaehana CI e like me Jenkins e hiki ke holo i nā ipu. A ʻo ke ala maʻalahi loa e hana i kēia, ʻo ia ka hoʻokomo ʻana i kahi kumu Docker i loko o kāu pahu CI a hoʻopili iā ia me ka hae -v.

E waiho wale, ke hoʻomaka ʻoe i kāu ipu CI (Jenkins a i ʻole nā ​​​​mea ʻē aʻe), ma kahi o ka hacking i kekahi mea me Docker-in-Docker, e hoʻomaka me ka laina:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

Hiki i kēia pahu ke komo i ke kumu Docker a no laila hiki iā ia ke holo i nā ipu. Ma waho aʻe o ka holo ʻana i nā ipu "keiki", e hoʻomaka ʻo ia i nā ipu "kaikunāne".

E hoʻāʻo i kēia me ka hoʻohana ʻana i ke kiʻi docker mana (ʻo ia ka Docker binary):

docker run -v /var/run/docker.sock:/var/run/docker.sock 
           -ti docker

ʻIke a hana ʻo ia e like me Docker-in-Docker, akā ʻaʻole ia ʻo Docker-in-Docker: i ka wā e hana ai kēia pahu i nā pahu hou, e hana ʻia lākou i ka Docker kiʻekiʻe. ʻAʻole ʻoe e ʻike i nā hopena ʻaoʻao o ka nesting a e kaʻana like ka ʻaha hui ma nā kelepona he nui.

Nānā: Ua aʻo ʻia nā mana mua o kēia ʻatikala e hoʻopili ana i ka Docker binary mai ka host i ka ipu. Ua lilo kēia i mea hilinaʻi ʻole ʻoiai ʻaʻole uhi hou ka mīkini Docker i nā hale waihona puke static a kokoke paha.

No laila, inā makemake ʻoe e hoʻohana iā Docker mai Jenkins CI, loaʻa iā ʻoe nā koho 2:
установка Docker CLI с использованием базовой системы упаковки образа (т. е. если ваш образ основан на Debian, используйте пакеты .deb), использование Docker API.

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

E kūʻai i ka hoʻokipa hilinaʻi no nā pūnaewele me ka pale DDoS, nā kikowaena VPS VDS 🔥 E kūʻai i ka hoʻokipa pūnaewele hilinaʻi me ka pale DDoS, nā kikowaena VPS VDS | ProHoster