Memahami Perbezaan Antara Docker dan Mesin Maya

Nodejs

Pengenalan kepada Docker dan Mesin Maya

Docker dan mesin maya (VM) adalah kedua-dua alat popular untuk menggunakan aplikasi, tetapi ia beroperasi dengan cara yang berbeza secara asasnya. Ramai pembangun mendapati diri mereka hairan dengan cara Docker boleh menyediakan sistem fail yang lengkap, rangkaian terpencil dan ciri lain tanpa overhed yang biasanya dikaitkan dengan VM.

Artikel ini bertujuan untuk menjelaskan perbezaan antara Docker dan mesin maya tradisional, menjelaskan mengapa Docker sering dianggap lebih ringan dan lebih mudah untuk menggunakan perisian. Kami akan menyelidiki teknologi asas dan faedah praktikal menggunakan Docker dalam persekitaran pengeluaran.

Perintah Penerangan
FROM Menentukan imej asas untuk digunakan untuk membuat bekas Docker.
WORKDIR Menetapkan direktori kerja di dalam bekas Docker.
COPY Menyalin fail atau direktori daripada mesin hos ke dalam bekas Docker.
RUN Melaksanakan arahan dalam bekas Docker semasa proses binaan.
EXPOSE Memaklumkan kepada Docker bahawa bekas mendengar pada port rangkaian yang ditentukan semasa masa jalan.
CMD Menentukan arahan untuk dijalankan dalam bekas Docker apabila ia bermula.
config.vm.box Mentakrifkan kotak asas untuk digunakan untuk mesin maya Vagrant.
config.vm.network Mengkonfigurasikan tetapan rangkaian, seperti memajukan port daripada hos kepada VM.
config.vm.provision Menentukan cara menyediakan mesin maya, seperti menjalankan skrip shell semasa persediaan.

Meneroka Dockerfile dan Vagrantfile

Dalam contoh yang disediakan, kami mula-mula menunjukkan cara membuat Dockerfile untuk menggunakan aplikasi Node.js. Fail Docker bermula dengan menentukan imej asas dengan arahan, dalam kes ini, menggunakan masa jalan Node.js rasmi. Menetapkan direktori kerja di dalam bekas dicapai dengan arahan, yang memastikan arahan seterusnya dilaksanakan dalam direktori yang ditentukan. The arahan digunakan untuk memindahkan fail package.json dan kod aplikasi ke dalam bekas. The RUN arahan kemudian memasang kebergantungan yang diperlukan di dalam bekas. Kami mendedahkan port yang dijalankan oleh aplikasi menggunakan perintah, dan akhirnya, arahan mentakrifkan arahan untuk menjalankan aplikasi apabila bekas bermula.

Untuk contoh Vagrantfile, konfigurasi bermula dengan menentukan kotak asas dengan arahan, di sini menggunakan Ubuntu 20.04. Tetapan rangkaian dikonfigurasikan menggunakan perintah, yang memajukan port 8080 pada hos kepada port 80 pada VM tetamu, membenarkan akses luaran kepada perkhidmatan yang dijalankan pada VM. The arahan digunakan untuk menjalankan skrip shell yang mengemas kini senarai pakej dan memasang Apache2, menyediakan VM dengan perisian yang diperlukan. Arahan ini mempamerkan langkah asas untuk menyediakan persekitaran VM, menawarkan pendekatan yang lebih tradisional berbanding dengan persekitaran kontena yang disediakan oleh Docker.

Mencipta Fail Docker untuk Penerapan Aplikasi Node.js

Contoh ini menunjukkan cara membuat Fail Docker untuk aplikasi Node.js, mempamerkan langkah-langkah untuk membina dan menjalankan aplikasi di dalam bekas Docker.

# Use an official Node.js runtime as a parent image
FROM node:14

# Set the working directory inside the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json to the container
COPY package*.json ./

# Install the application dependencies inside the container
RUN npm install

# Copy the rest of the application code to the container
COPY . .

# Expose the port the app runs on
EXPOSE 8080

# Define the command to run the app
CMD ["node", "app.js"]

Menyediakan Mesin Maya Menggunakan Vagrant

Contoh ini menunjukkan cara menyediakan mesin maya menggunakan Vagrant dengan Vagrantfile mudah, menunjukkan proses mentakrif dan mengkonfigurasi persekitaran VM.

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # Use Ubuntu 20.04 as the base box
  config.vm.box = "ubuntu/focal64"

  # Forward port 8080 on the host to port 80 on the guest
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Provision the VM with a shell script
  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install -y apache2
  SHELL
end

Memahami Docker dan Mesin Maya

Salah satu perbezaan utama antara Docker dan mesin maya (VM) terletak pada cara mereka menggunakan sumber sistem. VM dijalankan pada hypervisor, yang meniru perkakasan dan membenarkan berbilang sistem pengendalian berjalan serentak pada mesin hos. Ini memerlukan setiap VM untuk memasukkan sistem pengendalian tetamu penuh, set perpustakaannya sendiri dan binari. Ini bukan sahaja menggunakan sumber sistem yang ketara tetapi juga meningkatkan saiz keseluruhan dan kerumitan penggunaan dan penyelenggaraan.

Sebaliknya, Docker memanfaatkan teknologi kontena, yang membolehkan berbilang bekas berkongsi kernel sistem pengendalian yang sama. Setiap bekas berjalan sebagai proses terpencil dalam ruang pengguna. Ini bermakna bekas adalah lebih ringan dan lebih pantas untuk dimulakan berbanding VM, kerana mereka tidak perlu boot keseluruhan OS. Docker mencapai pengasingan sistem fail melalui sistem fail berlapis, di mana setiap bekas mempunyai lapisan sistem fail sendiri di atas imej asas. Pengasingan rangkaian dikendalikan menggunakan ruang nama, membolehkan Docker menyediakan persekitaran rangkaian terpencil untuk setiap bekas tanpa overhed yang dikaitkan dengan VM.

  1. Apakah perbezaan utama antara Docker dan VM?
  2. Docker menggunakan kontena untuk berkongsi kernel OS hos, menjadikannya lebih ringan dan lebih pantas, manakala VM memerlukan OS tetamu penuh dan hipervisor.
  3. Mengapa bekas Docker dianggap lebih cekap?
  4. Bekas berkongsi kernel OS hos dan mempunyai overhed minimum, membolehkan masa permulaan yang lebih cepat dan penggunaan sumber yang cekap.
  5. Bagaimanakah Docker mencapai pengasingan sistem fail?
  6. Docker menggunakan sistem fail berlapis, di mana setiap bekas mempunyai lapisan sistem fail sendiri di atas imej asas.
  7. Apakah hypervisor dalam konteks VM?
  8. Hipervisor ialah perisian yang meniru perkakasan, membenarkan berbilang sistem pengendalian berjalan serentak pada mesin hos tunggal.
  9. Bagaimanakah Docker mengendalikan pengasingan rangkaian?
  10. Docker menggunakan ruang nama untuk menyediakan persekitaran rangkaian terpencil untuk setiap bekas.
  11. Mengapa menggunakan perisian pada imej Docker lebih mudah daripada VM?
  12. Imej Docker merangkumi semua kebergantungan dan konfigurasi, memastikan konsistensi merentas persekitaran yang berbeza.
  13. Apakah beberapa kes penggunaan biasa untuk Docker?
  14. Docker biasanya digunakan untuk seni bina perkhidmatan mikro, penyepaduan berterusan/penyerahan berterusan (CI/CD) dan persekitaran pembangunan terpencil.
  15. Bolehkah bekas Docker berjalan pada mana-mana OS?
  16. Bekas Docker boleh dijalankan pada mana-mana OS yang menyokong Docker, tetapi mereka berkongsi kernel OS hos.
  17. Apakah imej asas dalam Docker?
  18. Imej asas ialah titik permulaan untuk membina bekas Docker, selalunya termasuk OS dan kebergantungan asas.

Merumuskan Docker vs. Mesin Maya

Dalam membandingkan Docker dan mesin maya, perbezaan utama terletak pada penggunaan sumber dan kecekapan penggunaannya. Mesin maya beroperasi dengan sistem pengendalian tetamu penuh dan hipervisor, yang membawa kepada penggunaan sumber yang lebih tinggi. Sebaliknya, bekas Docker berkongsi kernel OS hos, menghasilkan penyelesaian yang lebih ringan dan tangkas. Docker mencapai persekitaran terpencil melalui sistem fail berlapis dan ruang nama rangkaian, membolehkannya menyediakan fungsi yang serupa kepada VM tanpa overhed yang berkaitan. Ini menjadikan penggunaan perisian kepada imej Docker lebih cekap, konsisten dan lebih mudah untuk diurus dalam pelbagai persekitaran pengeluaran.

Kesimpulannya, penggunaan kontena Docker menawarkan kelebihan ketara berbanding mesin maya tradisional dengan meminimumkan penggunaan sumber dan memudahkan proses penggunaan. Dengan berkongsi kernel OS hos dan menggunakan sistem fail dan rangkaian terpencil, Docker menyediakan penyelesaian yang teguh lagi ringan untuk penggunaan aplikasi moden. Memahami perbezaan ini boleh membantu pembangun memilih alat yang sesuai untuk keperluan mereka, memastikan pengurusan aplikasi yang cekap dan berskala.