Naha Docker mangrupikeun kaulinan atanapi henteu? Atawa masih bener?

Hello dulur!

Abdi hoyong langsung kana topik, tapi bakal langkung leres pikeun nyarios sakedik ngeunaan carita kuring:

asup

I am a programmer kalawan pangalaman dina ngamekarkeun aplikasi kaca tunggal frontend, scala / java jeung nodejs on server.

Pikeun waktos anu lami (pasti sababaraha atanapi tilu taun), kuring nganggap yén Docker mangrupikeun manna ti surga sareng sacara umum mangrupikeun alat anu saé pisan sareng leres-leres unggal pamekar kedah tiasa ngagunakeunana. Sareng ieu kieu yén unggal pamekar kedah dipasang Docker dina mesin lokalna. Kumaha upami pendapat abdi, tingali ngaliwatan lowongan anu dipasang dina hh sarua. Unggal detik ngandung sebutan docker, sareng upami anjeun gaduhna, ieu bakal janten kaunggulan kalapa anjeun 😉

Di jalan kuring, kuring pendak sareng seueur jalma, kalayan sikap anu béda-béda ka Docker sareng ékosistemna. Sababaraha nyarios yén ieu mangrupikeun hal anu pikaresepeun anu ngajamin fungsionalitas cross-platform. Anu kadua henteu ngartos naha aranjeunna kedah dijalankeun dina peti sareng naon kauntungan anu bakal sumping ti éta, anu katilu henteu paduli pisan sareng henteu ngaganggu (aranjeunna ngan ukur nyerat kodeu teras angkat ka bumi - kuring sirik ka aranjeunna. jalan :)

Alesan pikeun pamakéan

Naha kuring nganggo docker? Panginten kusabab alesan ieu:

  • peluncuran database, 99% tina aplikasi make aranjeunna
  • ngaluncurkeun nginx pikeun distribusi frontend sareng proxying ka backend
  • Anjeun tiasa ngarangkep aplikasi dina gambar docker, ku cara ieu aplikasi abdi bakal dianggo dimana wae docker aya, masalah distribusi direngsekeun langsung
  • jasa kapanggihna out of the box, Anjeun bisa nyieun microservices, unggal wadahna (disambungkeun ka jaringan umum) bisa kalayan gampang ngahontal sejen via landian, pohara merenah.
  • Ieu fun nyieun wadahna sarta "maén" di dinya.

Naon anu kuring henteu resep ngeunaan docker:

  • Supados aplikasi abdi tiasa dianggo, Abdi peryogi Docker sorangan dina server. Naha kuring peryogi ieu upami aplikasi kuring dijalankeun dina jre atanapi nodejs sareng lingkunganana parantos aya dina server?
  • lamun abdi hoyong ngajalankeun abdi (swasta) gambar diwangun lokal dina server jauh, lajeng Abdi peryogi Repository docker kuring sorangan, Abdi peryogi pendaptaran pikeun digawé wae sarta kuring ogé kudu ngonpigurasikeun HTTPS, sabab docker cli ukur gawéna leuwih HTTPS. Oh damn ... aya pilihan, tangtosna, pikeun nyimpen gambar lokal via docker save na ngan ngirim gambar via scp ... Tapi éta loba gerakan awak. Sareng sajaba ti éta, éta sapertos solusi "kruk" dugi ka gudang anjeun nyalira muncul
  • docker-compose. Ieu ngan diperlukeun pikeun ngajalankeun peti. Éta hungkul. Anjeunna teu tiasa ngalakukeun nanaon sejenna. Docker-compose boga kebat versi file na, sintaksis sorangan. Henteu masalah kumaha déklaratif éta, kuring henteu hoyong maca dokuméntasina. Abdi henteu peryogi di tempat sanés.
  • Nalika damel di tim, seuseueurna jalma nyerat Dockerfile pisan bengkok, henteu ngartos kumaha éta sindangan, tambahkeun sadayana anu diperyogikeun sareng henteu peryogi kana gambar, inherit tina gambar anu henteu aya dina Dockerhub atanapi gudang pribadi, jieun sababaraha docker-compose file kalawan database jeung euweuh persists. Dina waktos anu sami, pamekar bangga nyatakeun yén Docker keren, sadayana tiasa dianggo sacara lokal pikeun aranjeunna, sareng HR anu penting nyerat dina lowongan: "Kami nganggo Docker sareng kami peryogi calon anu gaduh pangalaman padamelan sapertos kitu."
  • Kuring keur terus haunted ku pikiran ngeunaan raising sagalana di Docker: postgresql, kafka, redis. Ieu karunya nu teu sagalana jalan dina peti, teu sagalana gampang pikeun ngonpigurasikeun tur ngajalankeun. Ieu dirojong ku pamekar pihak katilu, sareng sanés ku padagang sorangan. Sareng ku jalan kitu, patarosan langsung timbul: padagang ulah hariwang ngeunaan ngajaga produkna di Docker, naha ieu, panginten aranjeunna terang?
  • Patarosan salawasna timbul ngeunaan kegigihan data wadahna. teras anjeun pikir, naha kuring ngan ukur pasang diréktori host atanapi ngadamel volume docker atanapi ngadamel wadah data anu ayeuna deprecated? Upami kuring masang diréktori, maka kuring kedah mastikeun yén uid sareng gid pangguna dina wadahna cocog sareng id pangguna anu ngaluncurkeun wadahna, upami file anu diciptakeun ku wadahna bakal didamel nganggo hak akar. Lamun kuring make volume lajeng data bakal saukur dijieun dina sababaraha /usr/* sareng bakal aya carita anu sami sareng uid sareng gid sapertos kasus anu munggaran. Upami anjeun ngaluncurkeun komponén pihak katilu, anjeun kedah maca dokuméntasi sareng milarian jawaban kana patarosan: "diréktori wadah mana komponén nyerat file?"

Kuring salawasna teu resep kanyataan yén kuring kungsi tinker kalawan Docker pikeun lila teuing dina tahap awal: Kuring ilahar kaluar kumaha carana ngajalankeun peti, naon gambar ngajalankeun tina, dijieun Makefiles nu ngandung aliases kana paréntah Docker panjang. Kuring benci docker-compose sabab kuring henteu hoyong diajar alat anu sanés dina ékosistem docker. AND docker-compose up Ieu ganggu kuring, utamana lamun maranéhna masih patepung di dinya build constructions, tinimbang gambar geus dirakit. Sadaya anu kuring hoyongkeun nyaéta ngan ukur ngadamel produk sacara épisién sareng gancang. Tapi kuring henteu tiasa terang kumaha ngagunakeun docker.

Nepangkeun Ansible

Anyar-anyar (tilu bulan kapengker), kuring damel sareng tim DevOps, ampir unggal anggota ngagaduhan sikep négatip ka Docker. Pikeun alesan:

  • aturan docker iptables (sanaos anjeun tiasa nganonaktipkeun dina daemon.json)
  • docker nyaeta Buggy sarta kami moal ngajalankeun eta dina produksi
  • upami daemon docker nabrak, maka sadaya wadahna sareng infrastruktur nabrak sasuai
  • teu perlu docker
  • naha docker lamun aya Ansible sarta mesin virtual

Dina pakasaban anu sarua, kuring jadi acquainted jeung alat sejen - Ansible. Kuring ngadéngé ngeunaan eta sakali, tapi kuring teu nyoba nulis playbooks sorangan. Sareng ayeuna kuring mimiti nyerat tugas kuring teras visi kuring robih lengkep! Kusabab kuring sadar: Ansible boga modul pikeun ngajalankeun wadah docker sarua, ngawangun gambar, jaringan, jeung sajabana, sarta wadahna bisa ngajalankeun teu ukur lokal, tapi ogé dina server jauh! Kasenangan kuring henteu terang watesna - kuring mendakan alat NORMAL sareng ngalungkeun file Makefile sareng docker-compose kuring, aranjeunna diganti ku tugas yaml. Kode ieu diréduksi ku ngagunakeun constructs kawas loop, whenJeung sajabana

Docker pikeun ngajalankeun komponén pihak katilu sapertos database

Abdi nembe janten kenal sareng torowongan ssh. Tétéla éta pisan gampang "neraskeun" port of server jauh ka port lokal. Pangladén jauh tiasa janten mesin dina méga atanapi mesin virtual anu dijalankeun dina VirtualBox. Lamun batur sapagawean abdi atanapi Abdi peryogi database a (atawa sababaraha komponén pihak-katilu sejenna), urang ngan saukur bisa ngamimitian server kalawan komponén ieu sareng mareuman nalika server teu diperlukeun. Port diteruskeun méré éfék sarua salaku database ngajalankeun dina wadah docker.

Paréntah ieu neraskeun port lokal kuring ka server jauh anu ngajalankeun postgresql:

ssh -L 9000: localhost: 5432 [email dijaga]

Ngagunakeun server jauh solves masalah sareng ngembangkeun tim. Server sapertos kitu tiasa dianggo ku sababaraha pamekar sakaligus; aranjeunna henteu kedah tiasa ngonpigurasikeun postgresql, ngartos Docker sareng intricacies sanésna. Dina server jauh, anjeun tiasa masang database anu sami dina Docker sorangan, upami sesah masang versi khusus. Sadaya anu diperyogikeun pamekar nyaéta nyayogikeun aksés ssh!

Kuring nembe maca yén torowongan SSH mangrupikeun fungsionalitas terbatas tina VPN biasa! Anjeun ngan saukur tiasa masang OpenVPN atanapi palaksanaan VPN anu sanés, nyetél infrastruktur sareng masihan ka pamekar pikeun dianggo. Ieu pisan keren!

Untungna, AWS, GoogleCloud sareng anu sanésna masihan anjeun pamakean gratis sataun, janten paké aranjeunna! Éta murah upami anjeun mareuman nalika henteu dianggo. Kuring salawasna wondered naha kuring bakal perlu server jauh kawas gcloud, sigana mah kapanggih aranjeunna.

Salaku mesin virtual lokal, anjeun tiasa nganggo Alpine sami, anu aktip dianggo dina wadah docker. Nya, atanapi sababaraha distribusi ringan anu sanés pikeun ngajantenkeun mesin langkung gancang.

Garis handap: anjeun tiasa sareng kedah ngajalankeun pangkalan data sareng barang infrastruktur sanés dina server jauh atanapi dina kotak virtual. Abdi henteu peryogi docker pikeun tujuan ieu.

Sakedik ngeunaan gambar docker sareng distribusi

Abdi parantos nyerat tulisan nu kuring hayang nepikeun yén ngagunakeun gambar docker teu nyadiakeun jaminan nanaon. Gambar Docker ngan ukur diperyogikeun pikeun nyiptakeun wadah docker. Upami anjeun ningkatkeun ka gambar docker, teras anjeun ningkatkeun nganggo wadah docker sareng anjeun ngan ukur bakal ngagunakeunana.

Naha anjeun ningali dimana waé pamekar parangkat lunak port produkna ngan ukur dina gambar docker?
Hasil tina kalolobaan produk nyaéta file binér pikeun platform khusus; aranjeunna ngan saukur ditambahkeun kana gambar docker, anu diwariskeun tina platform anu dipikahoyong. Naha anjeun kantos heran naha aya seueur gambar anu sami dina dockerhub? Lebetkeun nginx contona, anjeun bakal ningali 100500 gambar ti jalma anu béda. Jalma-jalma ieu henteu ngembangkeun nginx sorangan, aranjeunna ngan ukur nambihan nginx resmi kana gambar dockerna sareng dibumbui ku konfigurasi sorangan pikeun genah ngaluncurkeun wadah.

Sacara umum, anjeun ngan saukur tiasa nyimpen éta di tgz, upami aya anu kedah ngajalankeun éta di docker, teras ngantepkeun aranjeunna nambihan tgz kana Dockerfile, inherit ti lingkungan anu dipikahoyong sareng nyiptakeun buns tambahan anu henteu ngarobih aplikasi sorangan dina tgz. Saha waé anu bakal nyiptakeun gambar docker bakal terang naon tgz sareng naon anu anjeunna kedah dianggo. Ieu kumaha kuring nganggo docker di dieu

Garis handap: Abdi henteu peryogi pendaptaran docker, kuring bakal nganggo sababaraha jinis S3 atanapi ngan ukur neundeun file sapertos google drive / dropbox

Docker di CI

Sadaya perusahaan anu kuring damel sami. Aranjeunna biasana grocery. Hartina, maranéhna boga hiji aplikasi, hiji tumpukan téhnologi (sumur, meureun sababaraha atawa tilu basa programming).

Pausahaan ieu nganggo docker dina serverna dimana prosés CI jalan. Patarosan: Naha anjeun kedah ngawangun proyék dina wadah docker dina server anjeun? Naha henteu ngan nyiapkeun lingkungan pikeun ngawangun, contona, nyerat playbook Ansible anu bakal masang versi nodejs, php, jdk, nyalin konci ssh, jsb ka server dimana ngawangun bakal lumangsung?

Ayeuna kuring ngarti yén ieu shooting sorangan dina suku, sabab docker teu mawa kauntungan naon jeung isolasi na. Masalah anu kuring tepang sareng CI di docker:

  • deui anjeun peryogi gambar docker ngawangun. anjeun kedah milarian gambar atanapi nyerat dockerfile anjeun nyalira.
  • 90% yén anjeun kedah neraskeun sababaraha konci ssh, data rahasia anu anjeun henteu hoyong nyerat kana gambar docker.
  • wadahna dijieun tur maot, kabéh caches leungit sapanjang kalawan eta. ngawangun salajengna bakal ulang download sakabéh kagumantungan proyék, nu waktos-consuming tur teu epektip, sarta waktu duit.

Pamekar henteu ngawangun proyék dina wadah docker (kuring sakali kipas sapertos kitu, leres-leres, kuring punten ka diri kuring baheula xD). Dina java kasebut nyaéta dimungkinkeun pikeun mibanda sababaraha vérsi sarta ngarobahna ku hiji paréntah ka hiji nu peryogi ayeuna. Éta sami dina nodejs, aya nvm.

kacindekan

Kuring yakin yén docker mangrupakeun alat anu pohara kuat sarta fléksibel, ieu aral na (sora aneh, nuhun). Kalayan bantosanana, perusahaan tiasa gampang ngaitkeunana sareng nganggo dimana diperyogikeun sareng henteu diperyogikeun. Pamekar ngaluncurkeun wadahna, sababaraha lingkunganana, teras sadayana lancar ngalir kana CI sareng produksi. Tim DevOps nyerat sababaraha jinis kode pikeun ngajalankeun wadah ieu.

Paké docker ukur dina nu panganyarna panggung dina alur kerja anjeun, ulah sered kana proyék di awal. Éta moal ngabéréskeun masalah bisnis anjeun. Anjeunna ngan bakal mindahkeun masalah ka LAIN tingkat sarta nawiskeun solusi sorangan, anjeun bakal ngalakukeun pagawean ganda.

Nalika docker diperlukeun: Kuring datang ka kacindekan yén docker pohara alus pikeun ngaoptimalkeun hiji prosés dibikeun, tapi teu ngawangun fungsionalitas dasar

Upami anjeun masih mutuskeun ngagunakeun docker, teras:

  • ati-ati pisan
  • ulah maksakeun pamekar ngagunakeun docker
  • localize pamakéan na di hiji tempat, ulah nyebarkeun eta sakuliah sakabéh Dockefile na docker-ngarang repositories

PS:

  • Abdi nembe sumping di sakuliah packer sareng aranjeunna nyarios éta tiasa dianggo saé pisan sareng Ansible sareng ngamungkinkeun anjeun ngahijikeun prosés ngawangun gambar (kalebet gambar docker)
  • ogé ngeunaan docker, artikel metot

Hatur nuhun pikeun maca, kuring ngarepkeun anjeun kaputusan transparan dina urusan anjeun sareng dinten kerja anu produktif!

sumber: www.habr.com

Tambahkeun komentar