Memahami Docker

Saya telah menggunakan Docker selama beberapa bulan sekarang untuk menstrukturkan proses pembangunan/penyampaian projek web. Saya menawarkan pembaca Habrakhabr terjemahan artikel pengenalan tentang docker - "Memahami buruh pelabuhan".

Apa itu docker?

Docker ialah platform terbuka untuk membangunkan, menyampaikan dan mengendalikan aplikasi. Docker direka untuk menyampaikan aplikasi anda dengan lebih pantas. Dengan docker, anda boleh memisahkan aplikasi anda daripada infrastruktur anda dan merawat infrastruktur sebagai aplikasi terurus. Docker membantu anda menghantar kod anda dengan lebih pantas, menguji lebih pantas, menghantar aplikasi dengan lebih pantas dan mengurangkan masa antara menulis kod dan menjalankan kod. Docker melakukan ini melalui platform virtualisasi kontena yang ringan, menggunakan proses dan utiliti yang membantu anda mengurus dan mengehoskan aplikasi anda.

Pada terasnya, docker membolehkan anda menjalankan hampir semua aplikasi, diasingkan dengan selamat dalam bekas. Pengasingan selamat membolehkan anda menjalankan banyak bekas pada hos yang sama pada masa yang sama. Sifat ringan bekas, yang berjalan tanpa beban tambahan hypervisor, membolehkan anda memanfaatkan perkakasan anda dengan lebih baik.

Platform dan alatan virtualisasi kontena boleh berguna dalam kes berikut:

  • membungkus aplikasi anda (dan komponen yang anda gunakan) ke dalam bekas docker;
  • pengedaran dan penghantaran bekas ini kepada pasukan anda untuk pembangunan dan ujian;
  • meletakkan bekas ini di tapak pengeluaran anda, baik di pusat data mahupun di awan.

Untuk apa saya boleh menggunakan docker?

Terbitkan aplikasi anda dengan cepat

Docker sangat bagus untuk mengatur kitaran pembangunan. Docker membenarkan pembangun menjalankan bekas tempatan dengan aplikasi dan perkhidmatan. Yang seterusnya membolehkan anda menyepadukan dengan proses penyepaduan berterusan dan aliran kerja penggunaan.

Sebagai contoh, pembangun anda menulis kod secara setempat dan berkongsi timbunan pembangunan mereka (satu set imej Docker) dengan rakan sekerja. Apabila mereka bersedia, mereka menolak kod dan bekas ke tapak ujian dan menjalankan sebarang ujian yang diperlukan. Dari tapak ujian, mereka boleh menghantar kod dan imej kepada pengeluaran.

Lebih mudah disusun dan dibentangkan

Platform berasaskan kontena docker memudahkan untuk mengalihkan muatan anda. Bekas docker boleh dijalankan pada mesin tempatan anda, sama ada sebenar atau pada mesin maya dalam pusat data atau dalam awan.

Kemudahalihan dan sifat ringan docker menjadikannya mudah untuk mengurus beban kerja anda secara dinamik. Anda boleh menggunakan docker untuk menggunakan atau menutup aplikasi atau perkhidmatan anda. Kelajuan docker membolehkan ini dilakukan dalam masa hampir nyata.

Muatan yang lebih tinggi dan lebih banyak muatan

Docker ringan dan pantas. Ia menyediakan alternatif yang berdaya tahan, kos efektif kepada mesin maya berasaskan hypervisor. Ia amat berguna dalam persekitaran beban tinggi, contohnya, apabila mencipta awan atau platform-sebagai-perkhidmatan anda sendiri. Tetapi ia juga berguna untuk aplikasi bersaiz kecil dan sederhana apabila anda ingin memanfaatkan lebih banyak sumber yang anda miliki.

Komponen Docker Utama

Docker terdiri daripada dua komponen utama:

  • Docker: platform virtualisasi sumber terbuka;
  • Hab Docker: Platform-sebagai-perkhidmatan kami untuk mengedar dan mengurus bekas Docker.

Catatan! Docker diedarkan di bawah lesen Apache 2.0.

Seni bina Docker

Docker menggunakan seni bina pelayan pelanggan. Pelanggan Docker berkomunikasi dengan daemon Docker, yang memikul beban mencipta, menjalankan dan mengedarkan bekas anda. Kedua-dua pelanggan dan pelayan boleh berjalan pada sistem yang sama, anda boleh menyambungkan klien ke daemon docker jauh. Pelanggan dan pelayan berkomunikasi melalui soket atau API RESTful.

Memahami Docker

Daemon Docker

Seperti yang ditunjukkan dalam rajah, daemon berjalan pada mesin hos. Pengguna tidak berinteraksi dengan pelayan secara langsung, tetapi menggunakan klien untuk ini.

Pelanggan Docker

Pelanggan Docker, program docker, adalah antara muka utama kepada Docker. Ia menerima arahan daripada pengguna dan berinteraksi dengan daemon docker.

Pelabuhan dalam

Untuk memahami apa yang terdiri daripada docker, anda perlu mengetahui tentang tiga komponen:

  • imej
  • pendaftaran
  • bekas

Imej

Imej Docker ialah templat baca sahaja. Sebagai contoh, imej mungkin mengandungi sistem pengendalian Ubuntu dengan Apache dan aplikasi padanya. Imej digunakan untuk membuat bekas. Docker memudahkan anda mencipta imej baharu, mengemas kini imej sedia ada atau anda boleh memuat turun imej yang dibuat oleh orang lain. Imej ialah komponen binaan buruh pelabuhan.

Daftar

Pendaftaran Docker menyimpan imej. Terdapat pendaftaran awam dan persendirian di mana anda boleh memuat turun atau memuat naik imej. Pendaftaran Docker awam ialah Hab dok. Terdapat banyak koleksi imej yang disimpan di sana. Seperti yang anda tahu, imej boleh dibuat oleh anda atau anda boleh menggunakan imej yang dibuat oleh orang lain. Pendaftaran adalah komponen pengedaran.

Kontena

Bekas adalah serupa dengan direktori. Bekas mengandungi semua yang diperlukan oleh aplikasi untuk dijalankan. Setiap bekas dicipta daripada imej. Bekas boleh dibuat, dimulakan, dihentikan, dipindahkan atau dipadamkan. Setiap bekas diasingkan dan menyediakan platform selamat untuk aplikasi. Bekas adalah komponen kerja.

Jadi bagaimana Docker berfungsi?

Setakat ini kita tahu bahawa:

  • kita boleh mencipta imej di mana aplikasi kita berada;
  • kita boleh mencipta bekas daripada imej untuk menjalankan aplikasi;
  • Kami boleh mengedarkan imej melalui Docker Hub atau pendaftaran imej lain.

Mari lihat bagaimana komponen ini sesuai bersama.

Bagaimanakah imej itu berfungsi?

Kita sudah tahu bahawa imej ialah templat baca sahaja dari mana bekas dibuat. Setiap imej terdiri daripada satu set tahap. Docker menggunakan sistem fail kesatuan untuk menggabungkan tahap ini menjadi satu imej. Sistem fail Union membenarkan fail dan direktori daripada sistem fail yang berbeza (cawangan yang berbeza) bertindih secara telus, mewujudkan sistem fail yang koheren.

Salah satu sebab mengapa docker ringan adalah kerana ia menggunakan lapisan seperti ini. Apabila anda menukar imej, seperti mengemas kini aplikasi, lapisan baharu dicipta. Jadi, tanpa menggantikan keseluruhan imej atau membinanya semula, seperti yang anda mungkin perlu lakukan dengan mesin maya, hanya lapisan itu ditambah atau dikemas kini. Dan anda tidak perlu mengedarkan keseluruhan imej baharu, hanya kemas kini yang diedarkan, menjadikannya lebih mudah dan cepat untuk mengedarkan imej.

Di tengah-tengah setiap imej adalah imej asas. Contohnya, ubuntu, imej asas Ubuntu, atau fedora, imej asas pengedaran Fedora. Anda juga boleh menggunakan imej sebagai asas untuk mencipta imej baharu. Sebagai contoh, jika anda mempunyai imej apache, anda boleh menggunakannya sebagai imej asas untuk aplikasi web anda.

Catatan! Docker biasanya menarik imej daripada pendaftaran Docker Hub.

Imej Docker boleh dibuat daripada imej asas ini; kami memanggil langkah-langkah untuk membuat arahan imej ini. Setiap arahan mencipta imej atau tahap baharu. Arahannya adalah seperti berikut:

  • jalankan arahan
  • menambah fail atau direktori
  • mewujudkan pembolehubah persekitaran
  • arahan tentang perkara yang perlu dijalankan apabila bekas imej ini dilancarkan

Arahan ini disimpan dalam fail Dockerfile. Docker membaca ini Dockerfile, apabila anda membina imej, laksanakan arahan ini dan kembalikan imej akhir.

Bagaimanakah pendaftaran docker berfungsi?

Pendaftaran adalah repositori untuk imej docker. Setelah imej dibuat, anda boleh menerbitkannya ke pendaftaran Docker Hub awam atau ke pendaftaran peribadi anda.

Dengan klien docker, anda boleh mencari imej yang telah diterbitkan dan memuat turunnya ke mesin docker anda untuk membuat bekas.

Docker Hub menyediakan repositori imej awam dan peribadi. Mencari dan memuat turun imej daripada repositori awam tersedia untuk semua orang. Kandungan storan peribadi tidak termasuk dalam hasil carian. Dan hanya anda dan pengguna anda boleh menerima imej ini dan membuat bekas daripadanya.

Bagaimanakah bekas berfungsi?

Bekas terdiri daripada sistem pengendalian, fail pengguna dan metadata. Seperti yang kita tahu, setiap bekas dicipta daripada imej. Imej ini memberitahu docker apa yang ada dalam bekas, proses yang hendak dimulakan, bila bekas itu bermula dan data konfigurasi lain. Imej Docker adalah baca sahaja. Apabila docker memulakan bekas, ia mencipta lapisan baca/tulis di atas imej (menggunakan sistem fail kesatuan seperti yang dinyatakan sebelum ini) di mana aplikasi boleh dijalankan.

Apa yang berlaku apabila bekas bermula?

Atau menggunakan program docker, atau menggunakan API RESTful, klien docker memberitahu daemon docker untuk memulakan bekas.

$ sudo docker run -i -t ubuntu /bin/bash

Mari kita lihat arahan ini. Pelanggan dilancarkan menggunakan arahan docker, dengan pilihan run, yang mengatakan bahawa bekas baharu akan dilancarkan. Keperluan minimum untuk menjalankan bekas ialah atribut berikut:

  • imej mana yang hendak digunakan untuk membuat bekas. Dalam kes kita ubuntu
  • arahan yang anda mahu jalankan apabila bekas dimulakan. Dalam kes kita /bin/bash

Apa yang berlaku di bawah hud apabila kita menjalankan arahan ini?

Docker, mengikut urutan, melakukan perkara berikut:

  • memuat turun imej ubuntu: docker menyemak ketersediaan imej ubuntu pada mesin tempatan, dan jika ia tidak ada, kemudian muat turun dari Hab dok. Jika terdapat imej, ia menggunakannya untuk mencipta bekas;
  • mencipta bekas: apabila imej diterima, docker menggunakannya untuk mencipta bekas;
  • memulakan sistem fail dan memasang tahap baca sahaja: bekas dibuat dalam sistem fail dan imej ditambah pada tahap baca sahaja;
  • memulakan rangkaian/jambatan: mencipta antara muka rangkaian yang membolehkan docker berkomunikasi dengan mesin hos;
  • Menetapkan alamat IP: mencari dan menetapkan alamat;
  • Memulakan proses yang ditentukan: melancarkan aplikasi anda;
  • Memproses dan menghasilkan output daripada aplikasi anda: menyambung dan merekodkan input, output dan aliran ralat standard aplikasi anda supaya anda boleh menjejak prestasi aplikasi anda.

Anda kini mempunyai bekas yang berfungsi. Anda boleh mengurus bekas anda, berinteraksi dengan aplikasi anda. Apabila anda memutuskan untuk menghentikan aplikasi, padamkan bekas.

Teknologi yang digunakan

Docker ditulis dalam Go dan menggunakan beberapa ciri kernel Linux untuk melaksanakan fungsi di atas.

Ruang nama

Docker menggunakan teknologi namespaces untuk mengatur ruang kerja terpencil, yang kami panggil bekas. Apabila kita memulakan bekas, docker mencipta satu set ruang nama untuk bekas itu.

Ini mencipta lapisan terpencil, dengan setiap aspek bekas berjalan dalam ruang namanya sendiri dan tidak mempunyai akses kepada sistem luaran.

Senarai beberapa ruang nama yang digunakan oleh docker:

  • pid: untuk mengasingkan proses;
  • bersih: untuk menguruskan antara muka rangkaian;
  • ipc: untuk mengurus sumber IPC. (ICP: InterProccess Communication);
  • mnt: untuk menguruskan mata lekap;
  • UTC: untuk mengasingkan kernel dan penjanaan versi kawalan (UTC: Sistem perkongsian masa Unix).

Kumpulan kawalan

Docker juga menggunakan teknologi cgroups atau kumpulan kawalan. Kunci untuk menjalankan aplikasi secara berasingan ialah menyediakan aplikasi dengan hanya sumber yang ingin anda sediakan. Ini memastikan bahawa bekas akan menjadi jiran yang baik. Kumpulan kawalan membolehkan anda berkongsi sumber perkakasan yang tersedia dan, jika perlu, tetapkan had dan sekatan. Sebagai contoh, hadkan jumlah memori yang mungkin untuk bekas.

Sistem Fail Kesatuan

Union File Sysem atau UnionFS ialah sistem fail yang berfungsi dengan mencipta lapisan, menjadikannya sangat ringan dan pantas. Docker menggunakan UnionFS untuk mencipta blok dari mana bekas itu dibina. Docker boleh menggunakan beberapa varian UnionFS termasuk: AUFS, btrfs, vfs dan DeviceMapper.

Format Bekas

Docker menggabungkan komponen ini ke dalam pembungkus yang kami panggil format bekas. Format lalai dipanggil libcontainer. Docker juga menyokong format bekas tradisional pada Linux menggunakan LXC. Pada masa hadapan, Docker mungkin menyokong format kontena lain. Contohnya, menyepadukan dengan Penjara BSD atau Zon Solaris.

Sumber: www.habr.com

Tambah komen