Hacker News

BuildKit: ແກ້ວປະເສີດທີ່ເຊື່ອງໄວ້ຂອງ Docker ທີ່ສາມາດສ້າງເກືອບທຸກຢ່າງ

ຄຳເຫັນ

2 min read Via tuananh.net

Mewayz Team

Editorial Team

Hacker News

BuildKit: ແກ້ວປະເສີດທີ່ເຊື່ອງໄວ້ຂອງ Docker ທີ່ສາມາດສ້າງໄດ້ເກືອບທຸກຢ່າງ

ຜູ້​ພັດ​ທະ​ນາ​ສ່ວນ​ໃຫຍ່​ຮູ້ Docker ເປັນ​ການ​ແລ່ນ​ຕູ້​ເກັບ​ຮັກ​ສາ​ທີ່​ປ່ຽນ​ແປງ​ວິ​ທີ​ການ​ສົ່ງ​ຊອບ​ແວ​. ໜ້ອຍກວ່າທີ່ຮູ້ກ່ຽວກັບເຄື່ອງຈັກທີ່ງຽບໆຢູ່ໃຕ້ພື້ນຜິວຂອງທຸກການກໍ່ສ້າງ Docker ທີ່ທັນສະໄຫມ - BuildKit, ລະບົບການກໍ່ສ້າງຮຸ່ນຕໍ່ໄປທີ່ສົ່ງກັບ Docker ຕັ້ງແຕ່ຮຸ່ນ 18.09 ແລະກາຍເປັນ backend ເລີ່ມຕົ້ນໃນ Docker 23.0. ໃນຂະນະທີ່ວິສະວະກອນໂຕ້ຖຽງກັນຢ່າງບໍ່ຢຸດຢັ້ງກ່ຽວກັບການຕັ້ງຄ່າ Kubernetes ແລະຮູບແບບການບໍລິການຈຸລະພາກ, BuildKit ໄດ້ພັດທະນາຢ່າງບໍ່ຢຸດຢັ້ງເປັນໜຶ່ງໃນລະບົບການກໍ່ສ້າງທີ່ມີຄວາມຍືດຫຍຸ່ນທີ່ສຸດໃນລະບົບນິເວດ DevOps. ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ໄດ້​ຮັບ​ການ​ປິ່ນ​ປົວ​ມັນ​ເປັນ​ພຽງ​ແຕ່ docker build ໄວ​ຂຶ້ນ, ທ່ານ​ກໍາ​ລັງ​ປະ​ໄວ້​ຄວາມ​ສາ​ມາດ​ອັນ​ໃຫຍ່​ຫຼວງ​ໃນ​ຕາ​ຕະ​ລາງ. ບໍລິສັດທີ່ແລ່ນທໍ່ CI/CD ທີ່ມີຄວາມໄວສູງໄດ້ຕັດເວລາການກໍ່ສ້າງລົງ 50–70% ພຽງແຕ່ໂດຍການເຂົ້າໃຈສິ່ງທີ່ BuildKit ສະເຫນີໃຫ້ - ແລະນັ້ນແມ່ນພຽງແຕ່ການເລີ່ມຕົ້ນ.

ສິ່ງ​ທີ່​ເຮັດ​ໃຫ້ BuildKit ໂດຍ​ພື້ນ​ຖານ​ທີ່​ແຕກ​ຕ່າງ​ຈາກ Classic Builder

ເຄື່ອງຈັກສ້າງ Docker ຕົ້ນສະບັບໄດ້ປະຕິບັດຄໍາແນະນໍາ Dockerfile ຕາມລໍາດັບ, ຊັ້ນດຽວຕໍ່ເວລາ, ໂດຍບໍ່ມີການຮັບຮູ້ວ່າສິ່ງທີ່ເຮັດວຽກສາມາດເກີດຂຶ້ນໄດ້ຢ່າງປອດໄພຂະຫນານ. BuildKit ແທນທີ່ຮູບແບບການປະຕິບັດເສັ້ນນັ້ນດ້ວຍເສັ້ນສະແດງ acyclic directed (DAG) — ກຣາຟການເພິ່ງພາອາໄສທີ່ເຂົ້າໃຈວ່າຂັ້ນຕອນການສ້າງແມ່ນຂຶ້ນກັບກັນແລະກັນ ແລະອັນໃດບໍ່ໄດ້. ຂັ້ນ​ຕອນ​ອິດ​ສະ​ລະ​ປະ​ຕິ​ບັດ​ພ້ອມ​ກັນ​, ຂັ້ນ​ຕອນ​ທີ່​ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ແມ່ນ​ຂ້າມ​ທັງ​ຫມົດ​, ແລະ​ການ​ກໍ່​ສ້າງ​ທັງ​ຫມົດ​ກາຍ​ເປັນ​ຄໍາ​ອະ​ທິ​ບາຍ​ຂອງ​ສິ່ງ​ທີ່​ທ່ານ​ຕ້ອງ​ການ​ແທນ​ທີ່​ຈະ​ເປັນ​ລໍາ​ດັບ​ຄວາມ​ຈໍາ​ເປັນ​ຂອງ​ຂັ້ນ​ຕອນ​ທີ່​ທ່ານ​ຕ້ອງ​ບັນ​ຍາຍ​ຕາມ​ລໍາ​ດັບ​ທີ່​ຖືກ​ຕ້ອງ​.

ການ​ປ່ຽນ​ແປງ​ດ້ານ​ສະ​ຖາ​ປັດ​ຕະ​ຍະ​ກຳ​ນີ້​ມີ​ຜົນ​ສະ​ທ້ອນ​ທີ່​ຕາມ​ມາ​ທີ່​ເກີນ​ຄວາມ​ໄວ. ເມື່ອ Dockerfile ຫຼາຍຂັ້ນຕອນລວບລວມ Go binary ໃນຂັ້ນຕອນຫນຶ່ງ, ດາວໂຫລດ Node.js dependencies ໃນອື່ນ, ແລະປະກອບຮູບພາບການຜະລິດໃນສາມ, BuildKit ສາມາດດໍາເນີນການສອງຂັ້ນຕອນທໍາອິດພ້ອມໆກັນ. ການກໍ່ສ້າງທີ່ເຄີຍໃຊ້ເວລາສີ່ນາທີໃນນັກແລ່ນ CI ທີ່ມີປະສິດທິພາບໃນປັດຈຸບັນສໍາເລັດພາຍໃນເກົ້າສິບວິນາທີ. Stripe, Shopify, ແລະຄະແນນຂອງທີມງານວິສະວະກໍາລະດັບສູງອື່ນໆໄດ້ບັນທຶກຜົນປະໂຫຍດທີ່ຄ້າຍຄືກັນໃນເຄື່ອງມືພາຍໃນຂອງເຂົາເຈົ້າ retrospective. ຮູບແບບ DAG ຍັງໝາຍຄວາມວ່າ BuildKit ສາມາດສ້າງເມຕາເດຕາສ້າງທີ່ຖືກຕ້ອງສູງ, ເປັນພື້ນຖານສໍາລັບຄຸນສົມບັດເຊັ່ນ: ການຢັ້ງຢືນການຢັ້ງຢືນ ແລະການສ້າງໃບບິນເອກະສານ (SBOM) ທີ່ມີຄວາມສໍາຄັນຢ່າງໃຫຍ່ຫຼວງຕໍ່ຄວາມປອດໄພຂອງລະບົບຕ່ອງໂສ້ການສະໜອງ.

ນອກຈາກນັ້ນ, ຍັງມີການຫັນປ່ຽນແນວຄວາມຄິດໃນວິທີທີ່ cache invalidation ເຮັດວຽກ. ຜູ້ສ້າງແບບເກົ່າບໍ່ໄດ້ໃຊ້ໄດ້ທຸກຊັ້ນທີ່ຢູ່ຂ້າງລຸ່ມຂອງຄໍາແນະນໍາທີ່ມີການປ່ຽນແປງໃດໆ. BuildKit ຕິດຕາມ hashes ເນື້ອໃນໃນແຕ່ລະ input, ດັ່ງນັ້ນການປ່ຽນຄໍາຄິດຄໍາເຫັນໃນ Dockerfile ບໍ່ໄດ້ທໍາລາຍການເຂົ້າ cache ທີ່ເປັນຕົວແທນສາມສິບນາທີຂອງການລວບລວມ. ເມື່ອການສ້າງແຄສຂອງເຈົ້າແມ່ນຄວາມແຕກຕ່າງລະຫວ່າງການຕອບໂຕ້ 5 ນາທີ ແລະ ສີ່ສິບນາທີສຳລັບທີມວິສະວະກອນຂອງເຈົ້າ, ຄວາມແມ່ນຍໍານີ້ສຳຄັນກວ່າທີ່ມັນເບິ່ງຄືວ່າໃນເບື້ອງຕົ້ນ.

ສ້າງຫຼາຍເວທີ: ຫນຶ່ງຄໍາສັ່ງ, ທຸກໆສະຖາປັດຕະຍະກໍາ

ທຸງ --platform ຂອງ BuildKit ແລະການເຊື່ອມໂຍງ QEMU ຫັນປ່ຽນສິ່ງທີ່ເຄີຍເປັນບັນຫາການປະສານງານຫຼາຍລະບົບທີ່ເຈັບປວດໄປເປັນຄໍາສັ່ງດຽວ. ແລ່ນ docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . ຜະລິດຮູບສາມຮູບທີ່ພ້ອມຜະລິດຢູ່ໃນຂະໜານກັນຈາກການເອີ້ນໃຊ້ build ດຽວ. ຄວາມສາມາດນີ້ໄດ້ກາຍເປັນສິ່ງສໍາຄັນຍ້ອນວ່າອຸດສາຫະກໍາຫັນໄປສູ່ ARM — AWS Graviton3 instances ໃຫ້ປະສິດທິພາບລາຄາທີ່ດີກວ່າ 40% ໃນການເຮັດວຽກເຊັ່ນ: ການບໍລິການເວັບ ແລະການປະມວນຜົນຂໍ້ມູນ, ແລະ Apple Silicon ໄດ້ເຮັດໃຫ້ ARM ເປັນເຄື່ອງພັດທະນາເລີ່ມຕົ້ນສໍາລັບວິສະວະກອນຫຼາຍລ້ານຄົນ.

ກ່ອນການຮອງຮັບຫຼາຍເວທີຂອງ BuildKit ຈະເຕີບໃຫຍ່, ການຮັກສາທໍ່ກໍ່ສ້າງແຍກຕ່າງຫາກສໍາລັບສະຖາປັດຕະຍະກໍາທີ່ແຕກຕ່າງກັນແມ່ນເປັນສູນກາງຄ່າໃຊ້ຈ່າຍທີ່ແທ້ຈິງ. ທີມງານທັງຮັກສາ Dockerfiles ຫຼາຍ, ແລ່ນທໍ່ CI ແຍກຕ່າງຫາກໃນນັກແລ່ນທີ່ມີສະຖາປັດຕະຍະກໍາທີ່ແຕກຕ່າງກັນ, ຫຼືພຽງແຕ່ສົ່ງຮູບພາບ x86 ໄປທຸກບ່ອນແລະຈ່າຍຄ່າປັບຄ່າດ້ານໂຄງສ້າງພື້ນຖານຂອງ ARM. ດ້ວຍ BuildKit, ທ່ານກໍານົດການກໍ່ສ້າງຂອງທ່ານຫນຶ່ງຄັ້ງແລະໃຫ້ລະບົບຈັດການການລວບລວມຂໍ້ມູນສະເພາະຂອງສະຖາປັດຕະຍະກໍາຢ່າງໂປ່ງໃສ. ໂຄງການ Rust ທີ່ຕ້ອງການການລວບລວມຂ້າມ, ໂຄງການ Go ທີ່ມີການເພິ່ງພາອາໄສ CGO, ແພັກເກັດ Python ທີ່ມີສ່ວນຂະຫຍາຍ C — BuildKit ຈັດການກັບຊັ້ນ emulation ໂດຍບໍ່ຈໍາເປັນຕ້ອງໃຫ້ທ່ານເຂົ້າໃຈລາຍລະອຽດຂອງແຕ່ລະແພລະຕະຟອມເປົ້າຫມາຍ.

ມູນຄ່າທຸລະກິດພາກປະຕິບັດຢູ່ທີ່ນີ້ແມ່ນສາມາດວັດແທກໄດ້. ທີມງານທີ່ແລ່ນ 200 containers ໃນ AWS Graviton instances ທີ່ $0.04 ຕໍ່ vCPU-hour ທຽບກັບ instance x86 ທຽບເທົ່າຢູ່ທີ່ $0.056 ຕໍ່ vCPU-hour ປະຫຍັດປະມານ $11,520 ຕໍ່ປີຕໍ່ 100 vCPUs — ຈາກການເລືອກສະຖາປັດຕະຍະກຳທີ່ຖືກຕ້ອງ. ການເຮັດໃຫ້ທາງເລືອກນັ້ນສາມາດເຂົ້າເຖິງໄດ້ໂດຍບໍ່ມີການພະຍາຍາມວິສະວະກໍາຄືນໃຫມ່ແມ່ນປະເພດຂອງການເພີ່ມປະສິດທິພາບໂຄງສ້າງພື້ນຖານທີ່ຈ່າຍໃຫ້ກັບຕົວມັນເອງທັນທີ.

ການ​ຄຸ້ມ​ຄອງ​ຄວາມ​ລັບ​ໂດຍ​ບໍ່​ມີ​ການ​ຮົ່ວ​ໄຫລ​ເຂົ້າ​ໄປ​ໃນ​ຊັ້ນ​ຮູບ​ພາບ

ໜຶ່ງ​ໃນ​ຄຸນ​ສົມ​ບັດ BuildKit ທີ່​ບໍ່​ໄດ້​ຮັບ​ການ​ຍົກ​ຍ້ອງ​ທີ່​ສຸດ​ແມ່ນ API ຄວາມ​ລັບ​ຂອງ​ມັນ. ຕົວສ້າງ Docker ຄລາສສິກບໍ່ມີວິທີທາງທີ່ສະອາດທີ່ຈະຜ່ານຂໍ້ມູນປະຈໍາຕົວເຂົ້າໄປໃນການກໍ່ສ້າງໂດຍບໍ່ມີຂໍ້ມູນປະຈໍາຕົວເຫຼົ່ານັ້ນທີ່ອາດຈະສິ້ນສຸດໃນຊັ້ນຮູບພາບ. ຜູ້ພັດທະນາໄດ້ເຮັດວຽກນີ້ດ້ວຍການສ້າງແບບຫຼາຍຂັ້ນຕອນ, ຄໍາແນະນໍາ ARG, ແລະການສັ່ງຢ່າງລະມັດລະວັງ - ແຕ່ຄວາມສ່ຽງຂອງການອົບລະຫັດ API ຫຼືລະຫັດ SSH ສ່ວນຕົວເຂົ້າໄປໃນຮູບພາບທີ່ສົ່ງມາຍັງສູງທີ່ບໍ່ສະບາຍ. ເຄື່ອງສະແກນຄວາມປອດໄພຈະຊອກຫາຂໍ້ມູນປະຈຳຕົວທີ່ hardcoded ເປັນປະຈຳໃນຮູບ container ທີ່ຖືກເຜີຍແຜ່ໄປໃຫ້ສາທາລະນະໃນທະບຽນ, ແລະການຮົ່ວໄຫຼເຫຼົ່ານັ້ນໄດ້ຕິດຕາມໂດຍກົງກັບການຈັດການລັບທີ່ສັບສົນໃນລະຫວ່າງການສ້າງ.

ທຸງ ---secret ຂອງ BuildKit ຕິດຕັ້ງຂໍ້ມູນທີ່ລະອຽດອ່ອນເຂົ້າໄປໃນສະພາບແວດລ້ອມການກໍ່ສ້າງເປັນເສັ້ນທາງລະບົບໄຟລ໌ຊົ່ວຄາວທີ່ມີຢູ່ສໍາລັບໄລຍະເວລາຂອງຄໍາແນະນໍາສະເພາະ RUN ທີ່ຕ້ອງການມັນ ແລະບໍ່ເຄີຍແຕະໃສ່ຊັ້ນຮູບພາບໃດໆ. ຄຳສັ່ງ Dockerfile ເຊັ່ນ RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm install ໃຫ້ຂະບວນການສ້າງການເຂົ້າເຖິງຂໍ້ມູນປະຈຳຕົວ npm ສ່ວນຕົວໂດຍທີ່ຂໍ້ມູນປະຈຳຕົວເຫຼົ່ານັ້ນບໍ່ເຄີຍປະກົດຢູ່ໃນຮູບສຸດທ້າຍ ຫຼືຊັ້ນກາງໃດໆ. ຮູບແບບດຽວກັນໃຊ້ໄດ້ກັບຂໍ້ມູນປະຈໍາຕົວ PyPI, ການຕັ້ງຄ່າ Maven, ກະແຈ SSH ສໍາລັບບ່ອນເກັບມ້ຽນ Git ສ່ວນຕົວ ແລະອຸປະກອນທີ່ລະອຽດອ່ອນອື່ນໆທີ່ຂະບວນການສ້າງທີ່ເຈົ້າຕ້ອງການ.

ສຳລັບທີມສ້າງຊອບແວທີ່ສຳຜັດກັບອຸດສາຫະກຳທີ່ຄວບຄຸມ - ແພລດຟອມການດູແລສຸຂະພາບ, ຜະລິດຕະພັນ fintech, ຊອບແວ HR - ຄວາມແຕກຕ່າງລະຫວ່າງ "ຂໍ້ມູນປະຈຳຕົວອາດຈະຢູ່ໃນຮູບ" ແລະ "ຂໍ້ມູນຮັບຮອງບໍ່ສາມາດຢູ່ໃນຮູບໄດ້" ແມ່ນຄວາມແຕກຕ່າງລະຫວ່າງການຜ່ານການກວດສອບຄວາມປອດໄພ ແລະໃຊ້ເວລາສາມອາທິດແກ້ໄຂຜົນການຄົ້ນພົບ. ແພລດຟອມເຊັ່ນ: Mewayz, ເຊິ່ງເຮັດໃຫ້ການດໍາເນີນທຸລະກິດແກ່ຜູ້ໃຊ້ຫຼາຍກວ່າ 138,000 ຄົນໃນທົ່ວອຸດສາຫະກໍາຕ່າງໆເຊັ່ນ: ເງິນເດືອນ, HR, ແລະການອອກໃບແຈ້ງໜີ້, ຂຶ້ນກັບທ່າທາງຄວາມປອດໄພທີ່ພິສູດໄດ້ແບບນີ້ໃນທໍ່ກໍ່ສ້າງ ແລະ ການນຳໃຊ້ຂອງເຂົາເຈົ້າເພື່ອຮັກສາຄວາມໄວ້ເນື້ອເຊື່ອໃຈທີ່ລູກຄ້າເຫຼົ່ານັ້ນຂະຫຍາຍໄປສູ່ຂໍ້ມູນທາງດ້ານການເງິນ ແລະ ບຸກຄະລາກອນທີ່ລະອຽດອ່ອນຂອງເຂົາເຈົ້າ.

ການສົ່ງອອກແຄດ: ເຮັດໃຫ້ທໍ່ CI ເປັນຈິງໄດ້ໄວ

ທໍ່ CI ແມ່ນບ່ອນທີ່ການສ້າງປະສິດທິພາບສໍາຄັນທີ່ສຸດ ແລະບ່ອນທີ່ປະສົບການການສ້າງ Docker ເລີ່ມຕົ້ນໄດ້ຮັບຄວາມເຈັບປວດທີ່ສຸດໃນປະຫວັດສາດ. ປົກກະຕິນັກແລ່ນ CI ສົດໆເລີ່ມຕົ້ນດ້ວຍແຄສທີ່ຫວ່າງເປົ່າ, ຊຶ່ງຫມາຍຄວາມວ່າທຸກໆທໍ່ແລ່ນຈະລວບລວມທຸກສິ່ງທຸກຢ່າງຈາກຈຸດເລີ່ມຕົ້ນ. ສໍາລັບການບໍລິການ Java ທີ່ມີການຂຶ້ນກັບຫຼາຍຮ້ອຍ Maven, ໂຄງການ Rust, ຫຼືຄໍາຮ້ອງສະຫມັກ Python ທີ່ມີການຂະຫຍາຍພື້ນເມືອງທີ່ຮຸນແຮງ, ນີ້ຫມາຍຄວາມວ່າການກໍ່ສ້າງເວລາວັດແທກໃນສິບນາທີແທນທີ່ຈະເປັນວິນາທີ. ຄ່າໃຊ້ຈ່າຍທາງທຸລະກິດຂອງ CI ຊ້າແມ່ນມະຫາສານ — ຄວາມຖີ່ຂອງການນໍາມາໃຊ້ທີ່ຫຼຸດລົງ, ຮອບຕິຊົມທີ່ຍາວກວ່າ, ແລະວິສະວະກອນນັ່ງຢູ່ຊື່ໆລໍຖ້າທໍ່ໃຫ້ສໍາເລັດກ່ອນທີ່ຈະສາມາດລວມເຂົ້າກັນໄດ້.

ຄຸນສົມບັດການສົ່ງອອກແຄດຂອງ BuildKit ແກ້ໄຂບັນຫານີ້ດ້ວຍ cache manifests ທີ່ສາມາດສົ່ງອອກໄດ້. ໂດຍໃຊ້ --cache-to type=registry,ref=myregistry/myapp:cache ແລະ --cache-from type=registry,ref=myregistry/myapp:cache, BuildKit ຊຸກດັນໃຫ້ cache snapshot ລະອຽດໄປຫາທະບຽນຫຼັງຈາກແຕ່ລະການສ້າງ ແລະດຶງມັນໃນຕອນເລີ່ມຕົ້ນຂອງຕໍ່ໄປ. cache ແມ່ນການແກ້ໄຂເນື້ອຫາ, ດັ່ງນັ້ນພຽງແຕ່ຊັ້ນທີ່ຖືກປ່ຽນແປງຢ່າງແທ້ຈິງເທົ່ານັ້ນທີ່ຈະເອົາມາໃຫມ່. ທີມງານທີ່ໃຊ້ຮູບແບບນີ້ໃນ GitHub Actions, GitLab CI, ແລະ CircleCI ປົກກະຕິຕັດເວລາທໍ່ຈາກສິບຫ້ານາທີຫາຕໍ່າກວ່າສາມຄັ້ງໃນການແລ່ນຕໍ່ໄປ. ເອກະສານຂອງຕົນເອງຂອງ GitHub ກ່ຽວກັບຂັ້ນຕອນການສ້າງ Docker ຂັ້ນສູງແນະນຳຮູບແບບນີ້ຢ່າງໜັກແໜ້ນດ້ວຍເຫດຜົນນີ້.

ການສ້າງທີ່ໄວທີ່ສຸດແມ່ນອັນທີ່ເຈົ້າບໍ່ຕ້ອງແລ່ນອີກ. ການສ້າງລະບົບ cache ທີ່ມີເນື້ອໃນເປັນຊັ້ນໆຂອງ BuildKit ບໍ່ພຽງແຕ່ເລັ່ງການກໍ່ສ້າງເທົ່ານັ້ນ — ມັນເຮັດໃຫ້ແນວຄວາມຄິດທັງໝົດຂອງ "Build" ສະຫລາດຂຶ້ນ, ປ່ຽນການລວບລວມຂໍ້ມູນຊ້ຳໆໄປເປັນສ່ວນທີ່ເພີ່ມຂຶ້ນຂອງສິ່ງທີ່ປ່ຽນແປງຢ່າງແທ້ຈິງ.

ການສົ່ງອອກ Cache ຍັງປະສົມປະສານຢ່າງສະອາດກັບຂັ້ນຕອນການພັດທະນາຕາມສາຂາ. ທ່ານສາມາດກໍາຫນົດຄ່າທໍ່ CI ຂອງທ່ານເພື່ອກັບຄືນຈາກ cache ສະເພາະສາຂາໄປຫາ cache ສາຂາຕົ້ນຕໍໃນເວລາທີ່ບໍ່ມີ cache ສາຂາ, ຊຶ່ງຫມາຍຄວາມວ່າສາຂາໃຫມ່ໄດ້ຮັບຜົນປະໂຫຍດທັນທີຈາກ cache ອົບອຸ່ນທີ່ສະສົມໂດຍສາຍການພັດທະນາຕົ້ນຕໍຂອງທ່ານ. ວິສະວະກອນໄດ້ຮັບຄໍາຕິຊົມຢ່າງໄວວາຈາກຄໍາຫມັ້ນສັນຍາຄັ້ງທໍາອິດຂອງພວກເຂົາໃນສາຂາໃຫມ່ແທນທີ່ຈະລໍຖ້າການລົງໂທດເລີ່ມຕົ້ນເຢັນ.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

BuildKit Frontends: ສ້າງ Beyond Dockerfiles

ບາງທີຄວາມສາມາດທີ່ຮູ້ຈັກໜ້ອຍທີ່ສຸດຂອງ BuildKit ແມ່ນວ່າ Dockerfiles ເປັນພຽງຮູບແບບການປ້ອນຂໍ້ມູນທີ່ເປັນໄປໄດ້ອັນດຽວເທົ່ານັ້ນ - ບໍ່ແມ່ນຮູບແບບດຽວເທົ່ານັ້ນ. BuildKit ມີສະຖາປັດຕະຍະກໍາທາງຫນ້າທີ່ສາມາດສຽບໄດ້ທີ່ອະນຸຍາດໃຫ້ສ້າງແບບກໍານົດເອງທັງຫມົດພາສາແລະຮູບແບບ. ດ້ານໜ້າແມ່ນກຳນົດໂດຍຄຳສັ່ງ # syntax= ຢູ່ເທິງສຸດຂອງໄຟລ໌ build ຂອງທ່ານ, ເຊິ່ງບອກໃຫ້ BuildKit ດຶງຮູບໜ້າຕາສະເພາະໃດໜຶ່ງ ແລະໃຊ້ມັນເພື່ອວິເຄາະ ແລະດຳເນີນການສ່ວນທີ່ເຫຼືອຂອງໄຟລ໌.

ສະຖາປັດຕະຍະກຳນີ້ໄດ້ເປີດໃຊ້ໂຄງການທີ່ໜ້າສົນໃຈຫຼາຍໂຄງການ. ການເຊື່ອມໂຍງ Buildpacks ອະນຸຍາດໃຫ້ BuildKit ສ້າງຮູບພາບບັນຈຸຈາກລະຫັດແຫຼ່ງຂອງແອັບພລິເຄຊັນໂດຍບໍ່ມີ Dockerfile ໃດໆ - ມັນກວດພົບພາສາ, ເລືອກຮູບພາບພື້ນຖານທີ່ເຫມາະສົມ, ແລະປະກອບຖັງທີ່ກຽມພ້ອມສໍາລັບການຜະລິດໂດຍອັດຕະໂນມັດ. HPC ແລະຊຸມຊົນຄອມພິວເຕີ້ວິທະຍາສາດໄດ້ໃຊ້ຫນ້າທີ່ກໍານົດເອງເພື່ອອະທິບາຍການກໍ່ສ້າງໃນພາສາສະເພາະໂດເມນທີ່ລວບລວມລົງເປັນຕົວແທນ LLB (Low-Level Build) ພາຍໃນຂອງ BuildKit. ການທົດລອງດ້ານ syntax ຂອງ docker/dockerfile:labs ທີ່ມີຄຸນສົມບັດເຊັ່ນ: ການສະຫນັບສະຫນູນ heredoc, ການຄວບຄຸມ --network ຕໍ່ຄໍາແນະນໍາ, ແລະການປັບປຸງ cache hints ກ່ອນທີ່ມັນຈະລົງໃນ syntax Dockerfile ຄົງທີ່.

ຄວາມສາມາດໃນການກໍານົດ Frontend ຂອງທ່ານເອງຍັງຫມາຍຄວາມວ່າອົງການຈັດຕັ້ງທີ່ມີຄວາມຕ້ອງການການກໍ່ສ້າງທີ່ຜິດປົກກະຕິບໍ່ຈໍາເປັນຕ້ອງເລືອກລະຫວ່າງ "shoehorn ທຸກສິ່ງທຸກຢ່າງເຂົ້າໄປໃນ Dockerfile syntax" ແລະ "ປະຖິ້ມກ່ອງບັນຈຸທັງຫມົດ." ທີມງານສ້າງເຟີມແວ FPGA, ຮູບພາບຂອງລະບົບຝັງ, ຫຼືຕົວບັນຈຸແບບຈໍາລອງ ML ພິເສດສາມາດອະທິບາຍການສ້າງຂອງພວກເຂົາໃນເງື່ອນໄຂທີ່ມີຄວາມຫມາຍສໍາລັບໂດເມນຂອງພວກເຂົາໃນຂະນະທີ່ຍັງຜະລິດຮູບພາບບັນຈຸມາດຕະຖານ OCI ທີ່ນໍາໃຊ້ທຸກບ່ອນທີ່ບັນຈຸບັນຈຸແລ່ນ. ການຂະຫຍາຍນີ້ແມ່ນເປັນປະໂຫຍດທາງສະຖາປັດຕະຍະກຳຢ່າງແທ້ຈິງຕໍ່ກັບລະບົບການກໍ່ສ້າງທີ່ປະຕິບັດຕໍ່ຮູບແບບການປ້ອນຂໍ້ມູນຂອງເຂົາເຈົ້າຄົງທີ່.

Provenance ແລະ SBOM: ການກໍ່ສ້າງສຳລັບໂລກຫຼັງແສງອາທິດ

ຄວາມປອດໄພຂອງລະບົບຕ່ອງໂສ້ການສະໜອງຊອບແວໄດ້ຍ້າຍຈາກຄວາມເປັນຫ່ວງທາງທິດສະດີມາເປັນບູລິມະສິດລະດັບຄະນະຫຼັງຈາກການລະເມີດ SolarWinds ໃນປີ 2020 ແລະ ຊ່ອງໂຫວ່ຂອງ Log4Shell ໃນປີ 2021. ຄຳສັ່ງບໍລິຫານຂອງລັດຖະບານສະຫະລັດ 14028 ກ່ຽວກັບຄວາມປອດໄພທາງອິນເຕີເນັດ, ທີ່ອອກໃນເດືອນພຶດສະພາ 2021, ໄດ້ບັງຄັບໃຫ້ບັນດາຜູ້ຮັບເໝົາສ້າງບັນຊີຊອບແວຂອງລັດຖະບານກາງ. ການຢັ້ງຢືນຫຼັກຖານຂອງ BuildKit ແລະຄຸນສົມບັດການຜະລິດ SBOM ເປັນການຕອບສະໜອງໂດຍກົງຕໍ່ພູມສັນຖານດ້ານລະບຽບ ແລະຄວາມປອດໄພນີ້.

ດ້ວຍທຸງ --provenance=true ແລະ --sbom=true, BuildKit ຈະສ້າງໃບຢັ້ງຢືນທີ່ມີລາຍເຊັນ cryptographically ທີ່ອະທິບາຍເຖິງສິ່ງທີ່ເຂົ້າໄປໃນຮູບ container — ຮູບພາບພື້ນຖານໃດຖືກໃຊ້, ເຊິ່ງຄໍາແນະນໍາ Dockerfile ປະຕິບັດ, ມີໄຟລ໌ແຫຼ່ງໃດ, ແລະການອ້າງອີງພາຍນອກແມ່ນຫຍັງ. ການຢັ້ງຢືນເຫຼົ່ານີ້ປະຕິບັດຕາມກອບຂອງ SLSA (ລະດັບລະບົບຕ່ອງໂສ້ການສະໜອງສໍາລັບຊອບແວປອມ) ແລະຮູບແບບການຢັ້ງຢືນໃນຕົວ, ເຮັດໃຫ້ພວກມັນສາມາດຢັ້ງຢືນໄດ້ດ້ວຍເຄື່ອງຈັກໂດຍເຄື່ອງຈັກນະໂຍບາຍເຊັ່ນ: Sigstore's Cosign ແລະ OPA (Open Policy Agent).

ກະ​ແສ​ວຽກ​ງານ​ປະ​ຕິ​ບັດ​ທີ່​ເຮັດ​ໃຫ້​ເບິ່ງ​ຄື​ດັ່ງ​ນີ້:

  1. ຜູ້ພັດທະນາຍູ້ລະຫັດ; ທໍ່ CI ກະຕຸ້ນການສ້າງ BuildKit ດ້ວຍການເປີດໃຊ້ provenance.
  2. BuildKit ສ້າງ SBOM ທີ່ລົງນາມໃນລາຍການອົງປະກອບທັງໝົດ ແລະ ລຸ້ນຂອງພວກມັນ.
  3. SBOM ໄດ້ຖືກເຜີຍແຜ່ໄປໃສ່ບັນຊີບັນຈຸບັນຈຸພ້ອມກັບ manifest ຮູບພາບ.
  4. ຕົວຄວບຄຸມການຮັບເຂົ້າຊົມໃນກຸ່ມ Kubernetes ຢັ້ງຢືນການພິສູດກ່ອນອະນຸຍາດໃຫ້ນຳໃຊ້ໄດ້.
  5. ເຄື່ອງສະແກນຊ່ອງໂຫວ່ສອບຖາມ SBOM ເພື່ອລະບຸຮູບພາບທີ່ໄດ້ຮັບຜົນກະທົບເມື່ອ CVEs ໃໝ່ຖືກເປີດເຜີຍ.

ທີມງານທີ່ປະຕິບັດທໍ່ນີ້ເຕັມຮູບແບບສາມາດຕອບສະໜອງຕໍ່ການເປີດເຜີຍຊ່ອງໂຫວ່ພາຍໃນຊົ່ວໂມງແທນທີ່ຈະເປັນມື້, ເພາະວ່າພວກມັນມີແຜນທີ່ທີ່ຊັດເຈນ, ສາມາດອ່ານດ້ວຍເຄື່ອງຂອງທຸກອົງປະກອບໃນທຸກຖັງທີ່ແລ່ນ. ສໍາລັບທຸລະກິດເຊັ່ນ: Mewayz ທີ່ປະສົມປະສານຢ່າງເລິກເຊິ່ງເຂົ້າໄປໃນຂະບວນການປະຕິບັດການຂອງລູກຄ້າ - ແລ່ນບັນຊີເງິນເດືອນ, ການຄຸ້ມຄອງຂໍ້ມູນເຮືອ, ການປະມວນຜົນໃບແຈ້ງຫນີ້ - ຄວາມສາມາດໃນການສະແດງໃຫ້ເຫັນລະບົບຕ່ອງໂສ້ການສະຫນອງທີ່ເຂັ້ມງວດ, ການກວດສອບໄດ້ເພີ່ມຂຶ້ນເປັນເງື່ອນໄຂເບື້ອງຕົ້ນສໍາລັບການສົນທະນາການຂາຍວິສາຫະກິດ, ບໍ່ພຽງແຕ່ເປັນສິ່ງທີ່ດີເທົ່ານັ້ນ.

ການເລີ່ມຕົ້ນ: ຈາກການກໍ່ສ້າງເລີ່ມຕົ້ນໄປສູ່ທໍ່ຂັ້ນສູງ

BuildKit ກໍາລັງແລ່ນຢູ່ໃນສະພາບແວດລ້ອມ Docker ຂອງທ່ານແລ້ວ ຖ້າທ່ານກໍາລັງໃຊ້ເວີຊັນຫຼ້າສຸດ — Docker 23.0 ແລະຕໍ່ມາເປີດໃຊ້ມັນຕາມຄ່າເລີ່ມຕົ້ນ. ຂັ້ນຕອນການປະຕິບັດທໍາອິດສໍາລັບທີມງານສ່ວນໃຫຍ່ແມ່ນການເປີດໃຊ້ Docker Buildx plugin, ເຊິ່ງເປີດເຜີຍຄຸນສົມບັດເຕັມທີ່ຂອງ BuildKit ຜ່ານຄໍາສັ່ງຍ່ອຍ docker buildx. ແລ່ນ docker buildx create --use ຕັ້ງຄ່າຕົວສ້າງ BuildKit ທີ່ມີຄວາມສາມາດຫຼາຍກວ່າໄດເວີເລີ່ມຕົ້ນ. ຈາກບ່ອນນັ້ນ, ການເພີ່ມການຮັບຮອງເອົາຄຸນສົມບັດຂັ້ນສູງເຮັດໃຫ້ຄວາມຮູ້ສຶກຫຼາຍກວ່າການພະຍາຍາມຮັບຮອງເອົາທຸກຢ່າງໃນຄັ້ງດຽວ.

ເສັ້ນທາງການຮັບຮອງເອົາທີ່ສົມເຫດສົມຜົນສໍາລັບທີມງານທີ່ກໍາລັງເຮັດການຮ້ອງຂໍຂັ້ນພື້ນຖານ docker build ເບິ່ງຄືວ່າການເພີ່ມການສົ່ງອອກ cache ໄປຫາ CI ທໍາອິດ - ນີ້ສະຫນອງການປັບປຸງຄວາມໄວທີ່ສາມາດວັດແທກໄດ້ທັນທີທັນໃດກັບການປ່ຽນແປງການຕັ້ງຄ່າຫນ້ອຍ. ການກໍ່ສ້າງຫຼາຍແພລະຕະຟອມກາຍເປັນສິ່ງທີ່ມີຄຸນຄ່າໃນເວລາທີ່ທີມງານເລີ່ມຕົ້ນເປົ້າຫມາຍໂຄງສ້າງພື້ນຖານຂອງ ARM. ການຕິດຕັ້ງແບບລັບໆແມ່ນຄຸ້ມຄ່າທີ່ຈະຮັບເອົາການລົງທະບຽນແພັກເກັດສ່ວນຕົວ ຫຼືປຸ່ມ SSH ປະກົດຂຶ້ນໃນບໍລິບົດຂອງການກໍ່ສ້າງ. ໃບຢັ້ງຢືນການຢັ້ງຢືນມີຄວາມໝາຍທີ່ຈະເປີດໃຊ້ໄດ້ເມື່ອຄວາມຕ້ອງການປະຕິບັດຕາມ ຫຼືຄວາມຕ້ອງການຂອງລູກຄ້າວິສາຫະກິດເຮັດໃຫ້ເອກະສານລະບົບຕ່ອງໂສ້ການສະໜອງມີຄວາມຈໍາເປັນ.

ບົດຮຽນທີ່ເລິກເຊິ່ງກວ່າຂອງ BuildKit ແມ່ນກ່ຽວກັບການສ້າງໂດຍເຈດຕະນາ. ບໍ່ວ່າທ່ານຈະສົ່ງຕູ້ຄອນເທນເນີສໍາລັບການບໍລິການຈຸລະພາກ, ຈຸດສິ້ນສຸດຂອງການຮຽນຮູ້ເຄື່ອງຈັກ, ຫຼືເວທີທີ່ສະລັບສັບຊ້ອນເຊັ່ນ: ຊຸດທຸລະກິດ 207 ຂອງ Mewayz, ຂະບວນການສ້າງບໍ່ແມ່ນຮູບແບບທີ່ທ່ານຟ້າວແລ່ນໄປໃນວິທີການທີ່ຈະນໍາໄປໃຊ້ - ມັນເປັນສິ່ງປະດິດດ້ານວິສະວະກໍາທີ່ສະທ້ອນເຖິງຄຸນນະພາບ, ທ່າທາງຄວາມປອດໄພ, ແລະການເຕີບໂຕເຕັມທີ່ໃນການດໍາເນີນງານຂອງທຸກສິ່ງທຸກຢ່າງທີ່ສົ່ງອອກຈາກມັນ. BuildKit ໃຫ້ທ່ານມີເຄື່ອງມືເພື່ອເຮັດໃຫ້ສິ່ງປະດິດນັ້ນດີເລີດ. ຄຳຖາມແມ່ນພຽງແຕ່ວ່າເຈົ້າໃຊ້ເວລາໃນການໃຊ້ພວກມັນຫຼືບໍ່.

ຄຳຖາມທີ່ຖາມເລື້ອຍໆ

BuildKit ແມ່ນຫຍັງ ແລະມັນແຕກຕ່າງຈາກລະບົບການສ້າງ Docker ຄລາສສິກແນວໃດ?

BuildKit ແມ່ນເຄື່ອງຈັກສ້າງລຸ້ນຕໍ່ໄປຂອງ Docker, ນຳສະເໜີໃນ Docker 18.09 ແລະສ້າງຄ່າເລີ່ມຕົ້ນໃນ Docker 23.0. ບໍ່ເຫມືອນກັບຕົວສ້າງແບບຄລາສສິກ, BuildKit ສະຫນັບສະຫນູນການປະຕິບັດຊັ້ນຂະຫນານ, ຍຸດທະສາດການເກັບຂໍ້ມູນຂັ້ນສູງ, ການຕິດຕັ້ງຄວາມລັບ, ແລະການກໍ່ສ້າງຂ້າມເວທີ. ມັນປະຕິບັດຕໍ່ຂະບວນການສ້າງເປັນເສັ້ນກຣາບ acyclic ມຸ້ງ (DAG), ເຮັດໃຫ້ການແກ້ໄຂການເພິ່ງພາອາໄສທີ່ສະຫຼາດກວ່າ ແລະເວລາສ້າງໄວຂຶ້ນຢ່າງຫຼວງຫຼາຍສຳລັບ Dockerfiles ຫຼາຍຂັ້ນຕອນທີ່ສັບສົນ.

ຂ້ອຍຕ້ອງຕິດຕັ້ງອັນໃດເພີ່ມເຕີມເພື່ອເລີ່ມໃຊ້ BuildKit ກັບ Docker ບໍ?

ບໍ່​ຕ້ອງ​ການ​ຕິດ​ຕັ້ງ​ເພີ່ມ​ເຕີມ ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ກໍາ​ລັງ​ໃຊ້ Docker 23.0 ຫຼື​ຫຼັງ​ຈາກ​ນັ້ນ — BuildKit ຖືກ​ເປີດ​ໃຊ້​ງານ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​. ໃນລຸ້ນເກົ່າ, ທ່ານສາມາດເປີດໃຊ້ມັນໄດ້ໂດຍການຕັ້ງຕົວແປສະພາບແວດລ້ອມ DOCKER_BUILDKIT=1 ກ່ອນທີ່ຈະແລ່ນຄໍາສັ່ງສ້າງຂອງທ່ານ. ສຳລັບກໍລະນີການນຳໃຊ້ຂັ້ນສູງເຊັ່ນ: ການສ້າງຖານຄວາມຈຳທາງໄກ ຫຼື ການສ້າງຫຼາຍແພລດຟອມ, ທ່ານອາດຈະຕ້ອງການກຳນົດຄ່າຕົວສ້າງຕົວສ້າງ Buildx ສະເພາະໂດຍໃຊ້ docker buildx create.

ໃຊ້ BuildKit ເພື່ອສ້າງສິ່ງປະດິດທີ່ເກີນກວ່າຮູບບັນຈຸມາດຕະຖານໄດ້ບໍ?

ແມ່ນແລ້ວ, ແລະນີ້ແມ່ນໜຶ່ງໃນຄວາມສາມາດທີ່ຕໍ່າທີ່ສຸດຂອງ BuildKit. ການນໍາໃຊ້ຫນ້າທີ່ກໍານົດເອງແລະທຸງ ---output, BuildKit ສາມາດຜະລິດ binaries ດິບ, tarballs, ເວັບໄຊທ໌ຄົງທີ່, ແລະໄຟລ໌ປອມອື່ນໆທີ່ມັກ - ບໍ່ພຽງແຕ່ຮູບພາບ OCI. ນີ້ເຮັດໃຫ້ມັນເປັນເຄື່ອງຈັກໃນການກໍ່ສ້າງທົ່ວໄປທີ່ເຫມາະກັບທໍາມະຊາດຂອງ polyglot monorepos ແລະທໍ່ CI ສະລັບສັບຊ້ອນທີ່ທີມງານທີ່ແຕກຕ່າງກັນຕ້ອງການຮູບແບບຜົນຜະລິດທີ່ແຕກຕ່າງກັນຈາກລະບົບຕ່ອງໂສ້ເຄື່ອງມືທີ່ປະສົມປະສານ.

BuildKit ເໝາະກັບແພລດຟອມ DevOps ທີ່ກວ້າງກວ່າຄຽງຄູ່ກັບເຄື່ອງມືເຊັ່ນ Mewayz ແນວໃດ?

BuildKit ຈັດການກັບຊັ້ນການກໍ່ສ້າງລະດັບຕໍ່າ, ແຕ່ທີມງານພັດທະນາທີ່ທັນສະໄຫມຍັງຈໍາເປັນຕ້ອງຈັດການຂະບວນການເຮັດວຽກຂອງທຸລະກິດ, ການຈັດສົ່ງລູກຄ້າ, ແລະຂະບວນການປະຕິບັດງານ. ແພລດຟອມເຊັ່ນ Mewayz — 207-module business OS ເລີ່ມແຕ່ $19/mo — ເສີມສ້າງເຄື່ອງມືພື້ນຖານໂຄງລ່າງໂດຍການຄອບຄຸມດ້ານການດໍາເນີນງານຂອງທຸລະກິດຊອບແວ. ການຈັບຄູ່ທໍ່ກໍ່ສ້າງທີ່ມີປະສິດທິພາບທີ່ຂັບເຄື່ອນໂດຍ BuildKit ກັບແພລະຕະຟອມແບບຄົບວົງຈອນເຊັ່ນ Mewayz ຊ່ວຍໃຫ້ທີມງານມີສະແຕັກຄົບຖ້ວນສົມບູນຈາກລະຫັດປອມໄປຫາການຈັດສົ່ງລູກຄ້າ.