Docker untuk front-end. Bagian 2. Apa kamu?


Saya terus mendekripsi laporan Docker saya untuk front-end dari konferensi FrontendConf 2019 .


Di bagian sebelumnya, saya mencoba menjawab pertanyaan mengapa pengembang front-end mungkin membutuhkan Docker . Hari ini saya akan mencoba mengatakan dalam bahasa yang sederhana alat macam apa itu, bagaimana cara kerjanya, dan membandingkannya dengan konsep lain yang dikenal di frontend.


Isi


  1. Docker untuk front-end. Bagian 1. Mengapa?
  2. Docker untuk front-end. Bagian 2. Apa kamu?
  3. Docker untuk front-end. Bagian 3. Beberapa resep

Apa kamu


Siapa yang tidak tahu apa itu Docker, mereka bayangkan secara berbeda.



Seseorang berpikir bahwa ini adalah sarana untuk memasang wadah pada mesin.



Di bawah pengumuman di VK pada bagian sebelumnya dari artikel ini, beberapa komentar komik muncul.



Dan hanya administrator sistem yang tampaknya tahu sesuatu.



Orang-orang dari Docker, Inc mempersembahkan kepada kami alat ini melalui slogan pemasaran:


Debug aplikasi Anda, bukan lingkungan Anda
Mengumpulkan, berbagi, dan menjalankan aplikasi dengan aman di mana saja dengan aman

Dia sedikit licik. Sangat mungkin untuk mengumpulkan, berbagi, dan meluncurkan. Tetapi dengan "aman" dan dengan "di mana saja" segalanya tidak begitu.


Anda dapat mengetahui tentang masalah keamanan, misalnya, dalam artikel ini , tetapi tentang "di mana saja" Saya akan berbicara sedikit lebih jauh.


Virtualisasi


Kemampuan untuk melakukan virtualisasi sejak lama.


Ketika saya mengembangkan pada tahun 2012, tim saya mengerjakan proyek Ruby on Rails. Saya perlu menjalankan hal-hal seperti Ruby , MySQL , PostgreSQL di laptop saya. Ini semua bekerja sangat buruk di Windows , jadi saya harus menggunakan virtualisasi.


Lalu ada solusi seperti VirtualBox , VMware Workstation , Vagrant . Seluruh lingkungan kerja dipindahkan ke mesin virtual, dan hanya IDE , Git , dan browser yang tetap berada di sistem host.



Diagram ini, diambil dari dokumentasi Docker, hanya menunjukkan cara kerja mesin virtual ( VM ).


Kami memiliki Infrastruktur (komputer kami) dan Hypervisor (VMWare, VirtualBox atau yang lainnya). Dan untuk semua ini, kami menjalankan mesin virtual yang mencakup sistem operasi tamu ( Guest OS ), perpustakaan yang diperlukan ( Bins / Libs ) dan aplikasi kami ( App ).


Secara alami, mesin virtual itu sendiri ternyata sangat besar dan lambat. Biaya overhead untuk memelihara mesin virtual tinggi. Laptop saya hampir tidak mengeluarkan semuanya.



Docker, Inc menyarankan agar kami tidak menarik sistem operasi tamu ke dalam wadah virtual, tetapi menggunakan sistem host dan mendapatkan proses isolasi menggunakan mekanisme cgroups di Linux .


Ini secara signifikan mengurangi ukuran gambar. Sebagai contoh, alpine: gambar 3.11.0 (distribusi Linux yang berfokus pada keamanan, penerangan dan kebutuhan sumber daya yang rendah) beratnya hanya 2,5 MB , dan gambar buruh pelabuhan dengan simpul: alpine hanya 27 MB .


Yaitu situs / aplikasi kita dapat dikemas dalam gambar 30 MB yang akan cukup untuk dijalankan di Docker , dan itu akan bekerja di mana saja? Ya, tapi ada nuansa.


Instal Docker


Docker didistribusikan dalam dua edisi: Edisi Komunitas (CE) dan Edisi Perusahaan (EE) . Kami membutuhkan Docker CE , karena Ini gratis dan menyelesaikan semua masalah yang kita butuhkan.


Dan Docker juga Desktop dan Server .



Server


Versi server dirancang untuk diinstal pada Linux dan mendukung 4 distribusi dan hanya beberapa arsitektur. Oleh karena itu, pernyataan bahwa Anda dapat menjalankan wadah buruh pelabuhan "di mana saja" tidak sepenuhnya benar.


Desktop


Versi desktop dimaksudkan untuk instalasi di komputer oleh pengembang. Dan inilah yang akan membantu kami selama pengembangan aplikasi keren kami. Secara khusus, saya menggunakan Docker Desktop untuk Mac .


Menginstal di komputer terlihat seakrab mungkin bagi pengguna Mac.



Atau, jika Anda suka Homebrew.


brew cask install docker 

Setelah itu, aplikasi menjadi tersedia di bilah status atas dan dari konsol.



Peringatannya adalah bahwa kelompok kontrol Linux ( cgroup ) tidak ada di Mac dan Windows (kejutan, kejutan), sehingga Docker Desktop menggunakan kerangka kerja Mac OS Hypervisor dan Microsoft Hyper-V , masing-masing.



Artinya, untuk mendukung virtualisasi harus memberikan sekitar 4 GB RAM. Tapi wadah yang sudah bekerja akan memakan banyak ruang lebih sedikit daripada jika mereka menggunakan mesin virtual yang terpisah.


Output dari docker stats :


 CONTAINER ID NAME MEM USAGE e4941ea92ce7 nginx_1 3.16MiB 1b023bfff38f api_1 351.5MiB e07c6958e378 pg_1 18.64MiB 1fa783f5fdbc terminal-front_1 14.89MiB 72e9dfa0805a adminer_1 11.19MiB e9ce9f965867 admin-front_1 1.312MiB 3edacc59a77b certbot_1 1.547MiB 

Kami melihat bahwa database mengambil 19 MB , dan Java API - 352 MB .


Apa yang termasuk dalam Docker Desktop


Docker dirancang sebagai arsitektur modular, jadi ketika Anda menginstal Docker Desktop , Anda mendapatkan beberapa program sekaligus.


Mesin Docker


Mesin Docker termasuk alat pembangun kontainer, pencatatan kontainer, alat orkestrasi, runtime, dan banyak lagi. Ini adalah proyek sumber terbuka yang ditulis dalam Go . Itu dimulai sebagai daemon , yang menyediakan API tenang untuk menjalankan perintah.


Solusi ini memungkinkan Anda untuk mengelola wadah dari hampir di mana saja, misalnya, dari browser , Node.js atau bahkan dari Minecraft .



Klien Docker CLI


Klien konsol untuk API Mesin Docker.


Juga proyek sumber terbuka yang ditulis dalam Go .


Menulis Docker


Alat untuk menggambarkan dan meluncurkan aplikasi multi-kontainer. Hal yang sangat berguna dalam pengembangan.


Terasa seperti SRE . Secara alami ditulis dengan Python.


Mesin Docker


Alat untuk mengelola host jarak jauh tempat Docker diinstal. Kami tidak digunakan dalam pengembangan, tetapi datang dengan sisanya.


Kitematik


Open Source Docker Engine API GUI ditulis dalam JavaScript (Electron) .


Ideal untuk mereka yang tidak suka konsol dan bahkan untuk GIT menggunakan antarmuka grafis.


Alat ini cukup kasar, tetapi berfungsi ( v0.17.9 , > 800 masalah terbuka ).



Docker tidak hanya untuk admin


Sekarang sedikit analogi gratis untuk pengembang front-end untuk menunjukkan bahwa alat ini memiliki banyak kesamaan dengan hal-hal yang kita kenal, pengembang front-end, seperti Node.js dan NPM.


Gambar


Gambar buruh pelabuhan. Kami dapat menerbitkannya di suatu tempat, misalnya, di DockerHub. Kami juga dapat menerbitkan NPM- .


Dockerfile


Resep untuk sebuah gambar. Kami tidak memiliki resep, tetapi ada paket / manifes aplikasi - package.json .


membangun buruh pelabuhan


Menyatukan gambar buruh pelabuhan. Nah, di ujung depan kami sedang membangun aplikasi kami - npm run build .


Dockerhub



Jangan bingung dengan hub populer lainnya. Ini adalah daftar gambar dari buruh pelabuhan. Kami memiliki registri kami sendiri - NPM Registry .


buruh pelabuhan lari


Perintah konsol yang meluncurkan wadah. Analog terdekat dari dunia frontend adalah perintah npm start .


Proyek ini dimulai sebagai pengembangan hak milik


Proyek Docker dimulai pada 2008 sebagai pengembangan kepemilikan internal dotCloud, dan baru pada Maret 2013 diterbitkan dalam sumber terbuka.


Kami memiliki Node.js , yang meskipun awalnya merupakan open source, tetapi hingga Februari 2015 dan kisah skandal dengan io.js dikelola oleh Joyent .


Digunakan untuk semuanya


Kita semua tahu bahwa NPM adalah Pengelola Paket Node . Dulu, tetapi sekarang ada paket tidak hanya untuk Node.js , tetapi juga untuk browser .


Dan mungkin tidak ada paket di sana. Jika mau, Anda dapat meletakkan satu set font atau bahkan film di sana.


Hal yang sama dengan DockerHub . Anda dapat mempublikasikan apa pun di sana. Tidak ada moderasi awal.


Ada alternatif yang dirancang untuk diganti


Kita semua tahu bahwa ada manajer paket alternatif yang dapat Anda gunakan jika Anda tidak menyukai NPM . Ini adalah Benang , pnpm , jspm .


Docker juga bisa diganti dengan alternatif. Misalnya, Podmad atau Buildah .


Beberapa resep


Saya harap saya dapat menjabarkan secara umum tentang alat ini.


Pada bagian selanjutnya saya berencana untuk menunjukkan resep dan kasus spesifik menggunakan Docker untuk front-end.

Source: https://habr.com/ru/post/id479018/


All Articles