Apa Docker dolanan utawa ora? Utawa isih bener?

ВсСм ΠŸΡ€ΠΈΠ²Π΅Ρ‚!

Aku pancene pengin langsung menyang topik, nanging bakal luwih bener kanggo nyritakake babagan critaku:

entri

Aku programmer karo pengalaman ing ngembangaken aplikasi kaca siji frontend, scala / java lan nodejs ing server.

Kanggo dangu (mesthi saperangan utawa telung taun), Aku mratelakake panemume sing Docker punika manna saka swarga lan ing umum alat banget kelangan lan pancen saben pangembang kudu bisa nggunakake. Lan saka iki, saben pangembang kudu nginstal Docker ing mesin lokal. Apa babagan pendapatku, goleki lowongan sing dipasang ing hh sing padha. Saben detik ngemot sebutno docker, lan yen sampeyan duwe, iki bakal dadi kauntungan kompetitif sampeyan πŸ˜‰

Ing dalan, aku ketemu akeh wong, kanthi sikap sing beda karo Docker lan ekosisteme. Sawetara ujar manawa iki minangka barang sing trep sing njamin fungsi lintas platform. Sing nomer loro ora ngerti kenapa kudu mbukak ing wadhah lan entuk bathi apa, sing nomer telu ora peduli lan ora ngganggu (padha nulis kode lan mulih - aku iri karo dheweke. dalan :)

Alasan kanggo nggunakake

Napa aku nggunakake docker? Mbokmenawa amarga alasan ing ngisor iki:

  • peluncuran database, 99% aplikasi nggunakake
  • miwiti nginx kanggo distribusi frontend lan proxying menyang backend
  • sampeyan bisa ngemas aplikasi ing gambar docker, kanthi cara iki aplikasiku bakal bisa digunakake ing ngendi wae docker ana, masalah distribusi langsung ditanggulangi
  • layanan panemuan metu saka kothak, sampeyan bisa nggawe microservices, saben wadhah (disambungake menyang jaringan umum) bisa gampang tekan liyane liwat alias, banget trep
  • Iku nyenengake kanggo nggawe wadhah lan "muter" ing.

Apa sing aku ora seneng babagan docker:

  • Supaya aplikasiku bisa digunakake, aku butuh Docker dhewe ing server. Napa aku butuh iki yen aplikasiku mlaku ing jre utawa nodejs lan lingkungan kanggo dheweke wis ana ing server?
  • yen aku pengin mbukak gambar (pribadi) sing dibangun sacara lokal ing server remot, mula aku butuh gudang docker dhewe, aku butuh registri kanggo bisa nang endi wae lan aku uga kudu ngatur https, amarga docker cli mung bisa digunakake ing https. Oh peduli ... ana opsi, mesthi, kanggo nyimpen gambar lokal liwat docker save lan mung ngirim gambar liwat scp ... Nanging sing akeh obahe awak. Kajaba iku, katon kaya solusi "kruk" nganti repositori sampeyan katon
  • docker-compose. Iku mung perlu kanggo mbukak kontaner. Mekaten. Dheweke ora bisa nindakake apa-apa liyane. Docker-compose duwe akeh versi file, sintaks dhewe. Ora ketompo carane deklaratif, aku ora pengin maca dokumentasine. Aku ora butuh ing papan liya.
  • nalika nggarap tim, umume wong nulis Dockerfile kanthi bengkok, ora ngerti carane cache, nambah kabeh sing dibutuhake lan ora perlu kanggo gambar kasebut, entuk warisan saka gambar sing ora ana ing Dockerhub utawa repositori pribadi, nggawe sawetara docker-compose file karo database lan ora ana sing tetep. Ing wektu sing padha, para pangembang kanthi bangga nyatakake yen Docker keren, kabeh bisa digunakake sacara lokal kanggo dheweke, lan HR sing penting nulis ing lowongan kasebut: "Kita nggunakake Docker lan kita butuh calon sing duwe pengalaman kerja kaya ngono."
  • Aku terus-terusan dipikirake babagan ngunggahake kabeh ing Docker: postgresql, kafka, redis. Sayange ora kabeh bisa digunakake ing kontaner, ora kabeh gampang diatur lan mbukak. Iki didhukung dening pangembang pihak katelu, lan dudu vendor dhewe. Lan kanthi cara iki, pitakonan langsung muncul: vendor ora kuwatir babagan njaga produk ing Docker, kenapa iki, bisa uga ngerti?
  • Pitakonan tansah muncul babagan ketekunan data wadhah. banjur sampeyan mikir, apa aku mung masang direktori host utawa nggawe volume docker utawa nggawe wadhah data sing saiki deprecated? Yen aku masang direktori, aku kudu nggawe manawa uid lan gid pangguna ing wadhah kasebut cocog karo id pangguna sing mbukak wadhah kasebut, yen file sing digawe saka wadhah kasebut bakal digawe kanthi hak root. Yen aku nggunakake volume banjur data mung bakal digawe ing sawetara /usr/* lan bakal ana crita sing padha karo uid lan gid kaya ing kasus pisanan. Yen sampeyan ngluncurake komponen pihak katelu, sampeyan kudu maca dokumentasi lan goleki jawaban kanggo pitakonan: "ing direktori wadhah apa komponen kasebut nulis file?"

Aku mesthi ora seneng yen aku kudu tinker karo Docker nganti suwe ing tataran wiwitan: Aku figured metu carane miwiti kontaner, apa gambar kanggo miwiti saka, digawe Makefiles sing ngemot alias kanggo printah Docker dawa. Aku sengit docker-compose amarga aku ora pengin sinau alat liyane ing ekosistem docker. LAN docker-compose up Iku ngganggu kula, utamanΓ© yen padha isih ketemu ana build konstruksi, tinimbang gambar sing wis dirakit. Kabeh sing dakkarepake yaiku nggawe produk kanthi efisien lan cepet. Nanging aku ora bisa ngerti carane nggunakake docker.

Introducing Ansible

Bubar (telung wulan kepungkur), aku kerja karo tim DevOps, meh kabeh anggota duwe sikap negatif marang Docker. Kanggo alasan:

  • aturan docker iptables (sanajan sampeyan bisa mateni ing daemon.json)
  • docker iku buggy lan kita ora bakal mbukak ing produksi
  • yen daemon docker kacilakan, banjur kabeh kontaner karo infrastruktur kacilakan
  • ora perlu docker
  • kok docker yen ana Ansible lan mesin virtual

Ing proyek sing padha, aku dadi kenalan karo alat liyane - Ansible. Aku krungu bab iku sapisan, nanging aku ora nyoba kanggo nulis playbooks dhewe. Lan saiki aku miwiti nulis tugas lan banjur sesanti rampung diganti! Amarga aku temen maujud: Ansible duwe modul kanggo mbukak wadhah docker padha, mbangun gambar, jaringan, etc., lan kontaner bisa mbukak ora mung lokal, nanging uga ing server remot! Kesenenganku ora ngerti wates - Aku nemokake alat NORMAL lan mbuwang file Makefile lan docker-compose, padha diganti karo tugas yaml. Kode kasebut dikurangi kanthi nggunakake konstruksi kaya loop, when, Etc.

Docker kanggo mbukak komponen pihak katelu kayata database

Aku bubar dadi kenalan karo ssh tunnels. Ternyata gampang banget kanggo "nerusake" port server remot menyang port lokal. Server remot bisa dadi mesin ing awan utawa mesin virtual sing mlaku ing VirtualBox. Yen kolega utawa aku butuh database (utawa sawetara komponen pihak katelu liyane), kita mung bisa miwiti server karo komponen iki lan mateni nalika server ora perlu. Terusake port menehi efek sing padha karo database sing mlaku ing wadhah docker.

Printah iki nerusake port lokalku menyang server remot sing mlaku postgresql:

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

Nggunakake server remot ngatasi masalah karo pangembangan tim. Server kasebut bisa digunakake dening sawetara pangembang bebarengan; dheweke ora kudu bisa ngatur postgresql, ngerti Docker lan kerumitan liyane. Ing server remot, sampeyan bisa nginstal database sing padha ing Docker dhewe, yen angel nginstal versi tartamtu. Kabeh sing dibutuhake pangembang yaiku nyedhiyakake akses ssh!

Aku bubar maca terowongan SSH minangka fungsi winates saka VPN biasa! Sampeyan mung bisa nginstal OpenVPN utawa implementasi VPN liyane, nyiyapake infrastruktur lan menehi kanggo pangembang kanggo digunakake. Iki pancen keren!

Untunge, AWS, GoogleCloud lan liya-liyane menehi panggunaan gratis setaun, mula gunakake! Padha murah yen sampeyan mateni nalika ora digunakake. Aku tansah kepingin weruh apa aku kudu server remot kaya gcloud, misale jek sing aku ketemu wong.

Minangka mesin virtual lokal, sampeyan bisa nggunakake Alpine padha, kang aktif digunakake ing wadhah docker. Inggih, utawa sawetara distribusi entheng liyane kanggo nggawe boot mesin luwih cepet.

Intine: sampeyan bisa lan kudu mbukak database lan barang infrastruktur liyane ing server remot utawa ing virtualbox. Aku ora butuh docker kanggo tujuan kasebut.

A sethitik babagan gambar docker lan distribusi

Aku wis nulis artikel kang aku wanted kanggo ngirim sing nggunakake gambar docker ora njamin sembarang. Gambar Docker mung dibutuhake kanggo nggawe wadhah docker. Yen sampeyan nganyarke menyang gambar docker, sampeyan bakal nganyarke kanggo nggunakake wadhah docker lan sampeyan mung bakal nggunakake.

Apa sampeyan ndeleng ing ngendi wae pangembang piranti lunak port produk mung ing gambar docker?
Asil saka umume produk yaiku file binar kanggo platform tartamtu; mung ditambahake menyang gambar docker, sing diwarisake saka platform sing dikarepake. Apa sampeyan kepingin weruh kenapa akeh gambar sing padha ing dockerhub? Ketik nginx contone, sampeyan bakal weruh 100500 gambar saka wong beda. Wong-wong iki ora ngembangake nginx dhewe, dheweke mung nambah nginx resmi menyang gambar docker lan mbudidaya nganggo konfigurasi dhewe supaya gampang diluncurake.

UmumΓ©, sampeyan mung bisa nyimpen ing tgz, yen ana wong sing kudu mbukak ing docker, banjur nambah tgz menyang Dockerfile, oleh warisan saka lingkungan sing dikarepake lan nggawe roti tambahan sing ora ngganti aplikasi dhewe ing tgz. Sapa wae sing bakal nggawe gambar docker bakal ngerti apa tgz lan apa sing kudu ditindakake. Iki carane aku nggunakake docker kene

Bottom line: Aku ora butuh registri docker, aku bakal nggunakake sawetara jinis S3 utawa mung panyimpenan file kaya google drive / dropbox

Docker ing CI

Kabeh perusahaan sing dakgarap padha. Padha biasane sembako. Sing, padha duwe siji aplikasi, siji tumpukan teknologi (uga, bisa uga saperangan utawa telung basa program).

Perusahaan kasebut nggunakake docker ing server ing ngendi proses CI mlaku. Pitakonan: Napa sampeyan kudu nggawe proyek ing wadhah docker ing server sampeyan? Apa ora mung nyiyapake lingkungan kanggo mbangun, contone, nulis playbook Ansible sing bakal nginstal versi perlu saka nodejs, php, jdk, nyalin tombol ssh, etc menyang server kang mbangun bakal njupuk Panggonan?

Saiki aku ngerti yen iki njupuk dhewe ing sikil, amarga docker ora nggawa bathi karo isolasi. Masalah sing aku temoni karo CI ing docker:

  • maneh sampeyan kudu gambar docker kanggo mbangun. sampeyan kudu nggoleki gambar utawa nulis dockerfile dhewe.
  • 90% sampeyan kudu nerusake sawetara tombol ssh, data rahasia sing sampeyan ora pengin nulis menyang gambar docker.
  • wadhah digawe lan mati, kabeh caches ilang bebarengan karo. mbangun sabanjurΓ© bakal maneh download kabeh dependensi project, kang wektu-akeh lan ora efektif, lan wektu iku dhuwit.

Pangembang ora mbangun proyek ing wadhah docker (aku tau dadi penggemar, tenan, aku melas kanggo aku xD kepungkur). Ing java, sampeyan bisa duwe sawetara versi lan ngganti karo siji prentah menyang sing sampeyan butuhake saiki. Iku padha ing nodejs, ana nvm.

kesimpulan

Aku percaya yen docker minangka alat sing kuat lan fleksibel, iki minangka kekurangane (katone aneh, ya). Kanthi bantuan, perusahaan bisa gampang kecanthol lan nggunakake yen perlu lan ora dibutuhake. Pangembang miwiti kontaner, sawetara lingkungane, banjur kabeh lancar menyang CI lan produksi. Tim DevOps nulis sawetara jinis kode kanggo mbukak wadhah kasebut.

Gunakake docker mung ing paling anyar tataran ing alur kerja, aja seret menyang proyek ing wiwitan. Ora bakal ngrampungake masalah bisnis sampeyan. Dheweke mung bakal mindhah masalah menyang tingkat LAIN lan menehi solusi dhewe, sampeyan bakal nindakake karya kaping pindho.

Nalika docker dibutuhake: Aku teka menyang kesimpulan sing docker apik banget ing ngoptimalake proses tartamtu, nanging ora kanggo mbangun fungsi dhasar

Yen sampeyan isih arep nggunakake docker, banjur:

  • ati-ati banget
  • aja meksa pangembang nggunakake docker
  • localize panggunaane ing sak panggonan, aja nyebar ing kabeh repositori Dockefile lan docker-compose

PS:

Matur nuwun kanggo maca, muga-muga sampeyan nggawe keputusan sing transparan ing urusan lan dina kerja sing produktif!

Source: www.habr.com

Add a comment