Naon Docker: wisata ringkes kana sajarah sareng abstraksi dasar

Dimimitian dina 10 Agustus di Slurm Kursus video Docker, dimana urang nganalisa lengkep - tina abstraksi dasar ka parameter jaringan.

Dina tulisan ieu urang bakal ngobrol ngeunaan sajarah Docker sareng abstraksi utami: Image, Cli, Dockerfile. Kuliah dimaksudkeun pikeun pamula, ku kituna henteu dipikaresep pikeun dipikaresep ku pangguna anu ngalaman. Moal aya getih, apendiks atanapi immersion jero. Dasar pisan.

Naon Docker: wisata ringkes kana sajarah sareng abstraksi dasar

Naon Docker

Hayu urang tingali definisi Docker ti Wikipedia.

Docker mangrupikeun parangkat lunak pikeun ngajadikeun otomatis panyebaran sareng manajemén aplikasi dina lingkungan wadahna.

Henteu aya anu jelas tina definisi ieu. Ieu hususna can écés naon "dina lingkungan nu ngarojong containerization" hartina. Pikeun manggihan, hayu urang balik ka jaman. Hayu urang mimitian ku jaman anu ku kuring biasa disebut "Era Monolithic".

Jaman monolitik

Jaman monolitik nyaéta awal 2000-an, nalika sadaya aplikasina monolitik, kalayan seueur katergantungan. Pangwangunan nyandak waktos anu lami. Dina waktos anu sami, henteu seueur server; urang sadayana terang aranjeunna ku nami sareng ngawas aranjeunna. Aya perbandingan lucu sapertos kieu:

Pets mangrupakeun sato domestik. Dina jaman monolithic, urang ngarawat server urang kawas piaraan, groomed na cherished, niupan jauh specks lebu. Sareng pikeun manajemén sumberdaya anu langkung saé, kami nganggo virtualisasi: kami nyandak server sareng motong kana sababaraha mesin virtual, ku kituna mastikeun isolasi lingkungan.

Sistem virtualisasi basis Hypervisor

Sarerea meureun geus uninga ngeunaan sistem virtualization: VMware, VirtualBox, Hyper-V, Qemu KVM, jsb Aranjeunna nyadiakeun isolasi aplikasi tur manajemén sumberdaya, tapi maranéhna ogé boga kalemahan. Pikeun ngalakukeun virtualisasi, anjeun peryogi hypervisor. Jeung hypervisor mangrupa overhead sumberdaya. Jeung mesin virtual sorangan biasana sakabeh colossus - gambar beurat ngandung hiji sistem operasi, Nginx, Apache, sarta kamungkinan MySQL. Gambarna ageung sareng mesin virtual henteu pikaresepeun pikeun dioperasikeun. Hasilna, gawé bareng mesin virtual bisa jadi slow. Pikeun ngajawab masalah ieu, sistem virtualization dijieun dina tingkat kernel.

Sistem virtualisasi tingkat kernel

Virtualisasi tingkat kernel dirojong ku OpenVZ, Systemd-nspawn, sistem LXC. Conto anu luar biasa tina virtualisasi sapertos kitu nyaéta LXC (Linux Containers).

LXC mangrupikeun sistem virtualisasi tingkat sistem operasi pikeun ngajalankeun sababaraha instansi terasing tina sistem operasi Linux dina hiji titik. LXC henteu nganggo mesin virtual, tapi nyiptakeun lingkungan virtual kalayan rohangan prosés sareng tumpukan jaringan sorangan.

Intina LXC nyiptakeun wadah. Naon bédana antara mesin virtual sareng wadahna?

Naon Docker: wisata ringkes kana sajarah sareng abstraksi dasar

Wadahna henteu cocog pikeun ngasingkeun prosés: kerentanan kapanggih dina sistem virtualisasi dina tingkat kernel anu ngamungkinkeun aranjeunna kabur tina wadahna ka host. Ku alatan éta, lamun kudu ngasingkeun hal, eta leuwih hade migunakeun mesin virtual.

Bedana antara virtualization sareng containerization tiasa ditingali dina diagram.
Aya hypervisors hardware, hypervisors on luhureun OS, sarta wadahna.

Naon Docker: wisata ringkes kana sajarah sareng abstraksi dasar

Hypervisors hardware anu tiis lamun rék ngasingkeun hiji hal. Kusabab kasebut nyaéta dimungkinkeun pikeun ngasingkeun dina tingkat kaca memori sareng prosesor.

Aya hypervisors salaku program, tur aya wadahna, sarta kami bakal ngobrol ngeunaan eta salajengna. Sistim Containerization teu boga hypervisor a, tapi aya hiji Mesin Wadahna anu nyieun jeung ngatur peti. Hal ieu langkung hampang, janten kusabab damel sareng inti aya kirang overhead atanapi henteu pisan.

Naon anu dianggo pikeun wadahna dina tingkat kernel

Téknologi utama anu ngamungkinkeun anjeun nyiptakeun wadah anu diisolasi tina prosés anu sanés nyaéta Ruang Ngaran sareng Grup Kontrol.

Ruang ngaran: PID, Jaringan, Gunung sareng Pamaké. Aya deui, tapi pikeun ngagampangkeun pamahaman kami bakal difokuskeun ieu.

PID Namespace ngawatesan prosés. Nalika, contona, urang nyieun PID Namespace sarta nempatkeun hiji prosés aya, janten kalawan PID 1. Biasana dina sistem PID 1 nyaeta systemd atanapi init. Sasuai, nalika urang nempatkeun prosés dina namespace anyar, éta ogé nampi PID 1.

Networking Namespace ngamungkinkeun anjeun ngabatesan / ngasingkeun jaringan sareng nempatkeun antarmuka anjeun nyalira. Gunung mangrupikeun watesan sistem file. Pamaké-pangwatesan dina pamaké.

Grup kontrol: Mémori, CPU, IOPS, Jaringan - total 12 setélan. Upami teu kitu, aranjeunna disebut oge Cgroups ("C-grup").

Grup kontrol ngatur sumberdaya pikeun wadahna. Ngaliwatan Grup Control urang bisa disebutkeun yen wadahna teu kudu meakeun leuwih ti jumlah nu tangtu sumberdaya.

Pikeun wadahna tiasa dianggo sapinuhna, téknologi tambahan dianggo: Kamampuhan, Salinan-tulisan sareng anu sanésna.

Kamampuhan nyaéta nalika urang nyarioskeun prosés naon anu tiasa sareng henteu tiasa dilakukeun. Dina tingkat kernel, ieu ngan saukur bitmap sareng seueur parameter. Contona, pamaké root boga hak husus pinuh sarta bisa ngalakukeun sagalana. Server waktos tiasa ngarobih waktos sistem: éta gaduh kamampuan dina Time Capsule, sareng éta. Ngagunakeun hak husus, anjeun flexibly bisa ngonpigurasikeun larangan pikeun prosés, sahingga ngajaga diri.

Sistem Copy-on-write ngamungkinkeun urang pikeun damel sareng gambar Docker sareng ngagunakeunana langkung éfisién.

Docker ayeuna gaduh masalah kasaluyuan sareng Cgroups v2, janten tulisan ieu museurkeun khusus kana Cgroups v1.

Tapi hayu urang balik deui ka sajarah.

Nalika sistem virtualisasi muncul dina tingkat kernel, aranjeunna mimiti dianggo sacara aktip. The overhead on hypervisor nu ngiles, tapi sababaraha masalah tetep:

  • gambar badag: aranjeunna nyorong hiji sistem operasi, perpustakaan, kebat software béda kana OpenVZ sarua, sarta dina tungtungna gambar masih tétéla rada badag;
  • Henteu aya standar normal pikeun bungkusan sareng pangiriman, janten masalah katergantungan tetep. Aya kaayaan nalika dua potongan kode nganggo perpustakaan anu sami, tapi kalayan versi anu béda. Meureun aya konflik antara aranjeunna.

Pikeun ngajawab sagala masalah ieu, jaman salajengna geus datang.

Jaman wadah

Nalika Era Wadah sumping, filosofi gawé bareng aranjeunna robih:

  • Hiji prosés - hiji wadah.
  • Kami nganteurkeun sadaya katergantungan prosés anu diperyogikeun kana wadahna. Ieu merlukeun motong monoliths kana microservices.
  • Gambar anu langkung alit, langkung saé - aya sakedik kerentanan anu mungkin, éta gulung langkung gancang, sareng saterasna.
  • Instans janten ephemeral.

Inget naon ceuk kuring ngeunaan pets vs sapi? Saméméhna, instansi éta kawas sato domestik, tapi ayeuna geus jadi kawas sapi. Saméméhna, aya monolith - hiji aplikasi. Ayeuna éta 100 microservices, 100 wadahna. Sababaraha wadahna tiasa gaduh 2-3 réplika. Janten kirang penting pikeun urang ngadalikeun unggal wadah. Anu langkung penting pikeun kami nyaéta kasadiaan jasa éta sorangan: naon anu dilakukeun ku set wadah ieu. Ieu ngarobah pendekatan kana monitoring.

Dina 2014-2015, Docker mekar - téknologi anu bakal urang bahas ayeuna.

Docker ngarobih filsafat sareng bungkusan aplikasi standar. Nganggo Docker, urang tiasa ngarangkep aplikasi, kirimkeun ka gudang, unduh ti dinya, sareng nyebarkeunana.

Urang nempatkeun sagalana urang peryogi kana wadahna Docker, jadi masalah kagumantungan direngsekeun. Docker ngajamin reproducibility. Jigana loba jalma geus encountered irreproducibility: sagalana lumaku pikeun anjeun, anjeun nyorong ka produksi, sarta di dinya eureun gawé. Kalayan Docker masalah ieu dileungitkeun. Upami wadahna Docker anjeun ngamimitian sareng ngalakukeun naon anu kedah dilakukeun, maka kalayan probabilitas anu luhur éta bakal ngamimitian produksi sareng ngalakukeun anu sami di dinya.

Digression ngeunaan overhead

Aya salawasna sengketa ngeunaan overheads. Sababaraha urang yakin yén Docker teu mawa beban tambahan, sabab ngagunakeun kernel Linux Ubuntu jeung sagala prosés na diperlukeun pikeun containerization. Siga, "upami anjeun nyarios yén Docker overhead, teras kernel Linux langkung luhur."

Di sisi anu sanés, upami anjeun langkung jero, memang aya sababaraha hal di Docker anu, kalayan manteng, tiasa disebatkeun overhead.

Anu kahiji nyaéta namespace PID. Nalika urang nempatkeun prosés dina namespace a, ditugaskeun PID 1. Dina waktu nu sarua, prosés ieu PID sejen, anu lokasina dina namespace host, luar wadahna. Salaku conto, urang ngaluncurkeun Nginx dina wadah, janten PID 1 (prosés master). Sarta dina host boga PID 12623. Sarta hese ngomong sabaraha hiji overhead éta.

Hal kadua Cgroups. Hayu urang nyandak Cgroups ku memori, nyaeta, kamampuhan pikeun ngawatesan memori wadahna. Nalika diaktipkeun, konter sareng akuntansi mémori diaktipkeun: kernel kedah ngartos sabaraha halaman anu dialokasikeun sareng sabaraha anu masih gratis pikeun wadah ieu. Ieu kamungkinan mangrupa overhead, tapi kuring geus teu katempo sagala studi tepat ngeunaan kumaha eta mangaruhan kinerja. Sareng kuring sorangan henteu perhatikeun yén aplikasi anu dijalankeun di Docker ujug-ujug ngalaman rugi anu seukeut dina pagelaran.

Sareng hiji deui catetan ngeunaan pagelaran. Sababaraha parameter kernel disalurkeun ti host ka wadahna. Khususna, sababaraha parameter jaringan. Ku alatan éta, lamun rék ngajalankeun hal-kinerja tinggi di Docker, contona, hal anu aktip ngagunakeun jaringan, mangka anjeun sahenteuna kudu ngaluyukeun parameter ieu. Sababaraha nf_conntrack, contona.

Ngeunaan konsép Docker

Docker diwangun ku sababaraha komponén:

  1. Docker Daemon nyaéta Mesin Wadahna sami; ngaluncurkeun wadah.
  2. Docker CII mangrupikeun utilitas manajemén Docker.
  3. Dockerfile - pitunjuk ngeunaan cara ngawangun gambar.
  4. Gambar - gambar ti mana wadahna digulung kaluar.
  5. Wadahna.
  6. Pendaptaran Docker mangrupikeun gudang gambar.

Schematically eta kasampak kawas kieu:

Naon Docker: wisata ringkes kana sajarah sareng abstraksi dasar

Daemon Docker dijalankeun dina Docker_host sareng ngaluncurkeun wadah. Aya Klién anu ngirim paréntah: ngawangun gambar, unduh gambar, ngaluncurkeun wadahna. Daemon Docker angkat ka pendaptaran sareng ngalaksanakeunana. Klién Docker tiasa ngaksés duanana sacara lokal (kana soket Unix) sareng ngalangkungan TCP tina host jauh.

Hayu urang ngaliwat unggal komponén.

Daémon Docker - ieu teh bagian server, gawéna dina mesin host: ngundeur gambar na ngajalankeun wadahna ti aranjeunna, nyieun jaringan antara peti, ngumpulkeun log. Nalika urang nyarios "nyieun gambar," sétan ogé ngalakukeun éta.

Docker CLI - Bagian klien Docker, utilitas konsol pikeun gawé bareng daemon. Kuring ngulang, éta tiasa dianggo henteu ngan lokal, tapi ogé ngaliwatan jaringan.

Paréntah dasar:

docker ps - nunjukkeun wadah anu ayeuna dijalankeun dina host Docker.
gambar docker - némbongkeun gambar diundeur lokal.
docker search <> - milarian gambar dina pendaptaran.
docker pull <> - ngundeur gambar tina pendaptaran ka mesin.
docker ngawangun < > - ngumpulkeun gambar.
docker run <> - ngajalankeun wadahna.
docker rm <> - miceun wadahna.
log docker <> - log wadahna
docker ngamimitian / eureun / balikan deui <> - gawé bareng wadahna

Upami anjeun ngawasaan paréntah ieu sareng yakin dina ngagunakeunana, anggap diri anjeun 70% pinter dina Docker dina tingkat pangguna.

dockerfile - parentah pikeun nyieun hiji gambar. Ampir unggal paréntah paréntah nyaéta lapisan anyar. Hayu urang nempo hiji conto.

Naon Docker: wisata ringkes kana sajarah sareng abstraksi dasar

Ieu sapertos Dockerfile: paréntah di kénca, argumen di katuhu. Unggal paréntah anu aya di dieu (sareng umumna ditulis dina Dockerfile) nyiptakeun lapisan anyar dina Gambar.

Malah nempo sisi kénca, anjeun kasarna bisa ngarti naon anu lumangsung. Kami nyarios: "nyieun polder pikeun kami" - ieu mangrupikeun hiji lapisan. "Jieun folder jalan" nyaéta lapisan séjén, jeung saterusna. Lapisan jajan ngajadikeun hirup leuwih gampang. Mun kuring nyieun Dockerfile sejen tur ngarobah hiji hal dina garis panungtungan - Kuring ngajalankeun hal lian ti "python" "main.py", atawa install dependensi tina file sejen - lajeng lapisan saméméhna bakal dipaké deui salaku cache a.

gambaran - Ieu bungkusan wadahna; wadahna diluncurkeun tina gambar. Upami urang ningal Docker tina sudut pandang manajer pakét (saolah-olah urang damel sareng pakét deb atanapi rpm), maka gambar dasarna mangrupikeun pakét rpm. Ngaliwatan yum install urang tiasa install aplikasi, ngahapus eta, manggihan eta dina gudang, tur ngundeur éta. Éta sami di dieu: wadahna diluncurkeun tina gambar, disimpen dina pendaptaran Docker (sarupa yum, dina gudang), sareng unggal gambar ngagaduhan SHA-256 hash, nami sareng tag.

Gambar diwangun dumasar kana petunjuk ti Dockerfile. Unggal instruksi ti Dockerfile nyiptakeun lapisan anyar. Lapisan tiasa dianggo deui.

pendaptaran Docker mangrupakeun gudang gambar Docker. Sarupa sareng OS, Docker ngagaduhan pendaptaran standar umum - dockerhub. Tapi anjeun tiasa ngawangun gudang sorangan, pendaptaran Docker anjeun nyalira.

wadah - naon anu dibuka tina gambar. Urang ngawangun hiji gambar nurutkeun parentah ti Dockerfile, lajeng urang ngajalankeun eta tina gambar ieu. Wadah ieu diisolasi tina wadah anu sanés sareng kedah ngandung sadayana anu dipikabutuh pikeun fungsina aplikasi. Dina hal ieu, hiji wadah - hiji prosés. Éta kajadian yén anjeun kedah ngalakukeun dua prosés, tapi ieu rada bertentangan sareng ideologi Docker.

Sarat "hiji wadah, hiji prosés" aya hubunganana sareng PID Namespace. Nalika prosés sareng PID 1 dimimitian dina Namespace, upami ujug-ujug maot, maka sadayana wadahna ogé maot. Upami aya dua prosés: anu hiji hirup sareng anu sanésna paéh, maka wadahna bakal tetep hirup. Tapi ieu mangrupikeun patarosan ngeunaan Praktek Pangsaéna, urang bakal ngobrol ngeunaan éta dina bahan anu sanés.

Pikeun diajar fitur sareng program lengkep tina kursus sacara langkung rinci, mangga tuturkeun tautan: "Kursus video Docker".

Panulis: Marcel Ibraev, administrator Kubernetes Certified, practicing insinyur di Southbridge, spiker jeung pamekar kursus Slurm.

sumber: www.habr.com

Tambahkeun komentar