Izpratne par atšķirībām starp Docker un virtuālajām mašīnām

Izpratne par atšķirībām starp Docker un virtuālajām mašīnām
Izpratne par atšķirībām starp Docker un virtuālajām mašīnām

Ievads Docker un virtuālajās mašīnās

Docker un virtuālās mašīnas (VM) ir populāri rīki lietojumprogrammu izvietošanai, taču tie darbojas būtiski atšķirīgi. Daudzi izstrādātāji ir neizpratnē par to, kā Docker var nodrošināt pilnīgu failu sistēmu, izolētu tīklu un citas funkcijas bez pieskaitāmām izmaksām, kas parasti ir saistītas ar virtuālajām mašīnām.

Šī raksta mērķis ir precizēt atšķirības starp Docker un tradicionālajām virtuālajām mašīnām, paskaidrojot, kāpēc Docker bieži tiek uzskatīts par vieglāku un vieglāk izvietojamu programmatūru. Mēs iedziļināsimies pamatā esošajās tehnoloģijās un praktiskajās priekšrocībās, ko sniedz Docker izmantošana ražošanas vidēs.

Pavēli Apraksts
FROM Norāda pamata attēlu, kas jāizmanto Docker konteinera izveidei.
WORKDIR Iestata darba direktoriju Docker konteinerā.
COPY Kopē failus vai direktorijus no saimniekdatora Docker konteinerā.
RUN Būvēšanas procesa laikā izpilda komandu Docker konteinerā.
EXPOSE Informē Docker, ka konteiners izpildes laikā klausās norādītajos tīkla portos.
CMD Norāda komandu, kas jāpalaiž Docker konteinerā, kad tā tiek startēta.
config.vm.box Definē pamatlodziņu, ko izmantot virtuālajai mašīnai Vagrant.
config.vm.network Konfigurē tīkla iestatījumus, piemēram, portu pārsūtīšanu no resursdatora uz virtuālo mašīnu.
config.vm.provision Norāda, kā nodrošināt virtuālo mašīnu, piemēram, palaist čaulas skriptus iestatīšanas laikā.

Dockerfile un Vagrantfile izpēte

Piedāvātajos piemēros mēs vispirms parādījām, kā izveidot Dockerfile lietojumprogrammas Node.js izvietošanai. Dockerfile sākas, norādot pamata attēlu ar FROM komandu, šajā gadījumā izmantojot oficiālu Node.js izpildlaiku. Darba direktorija iestatīšana konteinera iekšpusē tiek panākta ar WORKDIR komanda, kas nodrošina turpmāko komandu izpildi norādītajā direktorijā. The COPY komanda tiek izmantota, lai pack.json failus un lietojumprogrammas kodu pārsūtītu uz konteineru. The RUN pēc tam konteinerā instalē nepieciešamās atkarības. Mēs atklājam portu, kurā lietojumprogramma darbojas, izmantojot EXPOSE komandu un visbeidzot CMD komanda definē komandu, lai palaistu lietojumprogrammu, kad konteiners tiek startēts.

Vagrantfile piemērā konfigurācija sākas, norādot bāzes lodziņu ar config.vm.box komandu, šeit izmantojot Ubuntu 20.04. Tīkla iestatījumi tiek konfigurēti, izmantojot config.vm.network komanda, kas pārsūta resursdatora portu 8080 uz viesa virtuālās mašīnas portu 80, nodrošinot ārēju piekļuvi pakalpojumiem, kas darbojas virtuālajā mašīnā. The config.vm.provision komanda tiek izmantota, lai palaistu čaulas skriptu, kas atjaunina pakotņu sarakstu un instalē Apache2, nodrošinot virtuālo mašīnu ar nepieciešamo programmatūru. Šīs komandas parāda VM vides iestatīšanas pamatdarbības, piedāvājot tradicionālāku pieeju salīdzinājumā ar Docker nodrošināto konteinerizēto vidi.

Docker faila izveide Node.js lietojumprogrammu izvietošanai

Šis piemērs parāda, kā izveidot Dockerfile lietojumprogrammai Node.js, parādot darbības, kas jāveic, lai izveidotu un palaistu lietotni Docker konteinerā.

# 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"]

Virtuālās mašīnas iestatīšana, izmantojot Vagrant

Šajā piemērā parādīts, kā iestatīt virtuālo mašīnu, izmantojot Vagrant ar vienkāršu Vagrantfile, demonstrējot VM vides definēšanas un konfigurēšanas procesu.

# -*- 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

Izpratne par Docker un virtuālajām mašīnām

Viena no galvenajām atšķirībām starp Docker un virtuālajām mašīnām (VM) ir tajā, kā tās izmanto sistēmas resursus. Virtuālās mašīnas darbojas ar hipervizoru, kas emulē aparatūru un ļauj resursdatorā vienlaikus darboties vairākām operētājsistēmām. Šim nolūkam katrā virtuālajā mašīnā ir jāiekļauj pilna viesa operētājsistēma, savs bibliotēku komplekts un binārie faili. Tas ne tikai patērē ievērojamus sistēmas resursus, bet arī palielina kopējo izvietošanas un uzturēšanas apjomu un sarežģītību.

Turpretim Docker izmanto konteinerizācijas tehnoloģiju, kas ļauj vairākiem konteineriem koplietot vienu un to pašu operētājsistēmas kodolu. Katrs konteiners darbojas kā izolēts process lietotāja telpā. Tas nozīmē, ka konteineri ir daudz vieglāki un ātrāk startējami, salīdzinot ar virtuālajām mašīnām, jo ​​tiem nav nepieciešams palaist visu OS. Docker panāk failu sistēmas izolāciju, izmantojot slāņveida failu sistēmu, kur katram konteineram ir savs failu sistēmas slānis virs pamata attēla. Tīkla izolācija tiek apstrādāta, izmantojot nosaukumvietas, ļaujot Docker nodrošināt izolētas tīkla vides katram konteineram bez pieskaitāmām izmaksām, kas saistītas ar virtuālajām mašīnām.

Bieži uzdotie jautājumi par Docker un virtuālajām mašīnām

  1. Kāda ir galvenā atšķirība starp Docker un virtuālajām mašīnām?
  2. Docker izmanto konteinerizāciju, lai koplietotu resursdatora OS kodolu, padarot to vieglāku un ātrāku, savukārt virtuālajām mašīnām ir nepieciešama pilna viesa OS un hipervizors.
  3. Kāpēc Docker konteineri tiek uzskatīti par efektīvākiem?
  4. Konteineri koplieto resursdatora OS kodolu, un tiem ir minimālas pieskaitāmās izmaksas, kas ļauj ātrāk startēt un efektīvi izmantot resursus.
  5. Kā Docker panāk failu sistēmas izolāciju?
  6. Docker izmanto slāņu failu sistēmu, kur katram konteineram ir savs failu sistēmas slānis virs pamata attēla.
  7. Kas ir hipervizors virtuālo mašīnu kontekstā?
  8. Hipervizors ir programmatūra, kas emulē aparatūru, ļaujot vairākām operētājsistēmām darboties vienlaikus vienā resursdatorā.
  9. Kā Docker apstrādā tīkla izolāciju?
  10. Docker izmanto nosaukumvietas, lai nodrošinātu izolētas tīkla vides katram konteineram.
  11. Kāpēc programmatūras izvietošana Docker attēlā ir vienkāršāka nekā virtuālajā mašīnā?
  12. Docker attēli iekapsulē visas atkarības un konfigurācijas, nodrošinot konsekvenci dažādās vidēs.
  13. Kādi ir daži izplatītākie Docker lietošanas gadījumi?
  14. Docker parasti izmanto mikropakalpojumu arhitektūrai, nepārtrauktai integrācijai/nepārtrauktai izvietošanai (CI/CD) un izolētām izstrādes vidēm.
  15. Vai Docker konteineri var darboties jebkurā OS?
  16. Docker konteineri var darboties jebkurā OS, kas atbalsta Docker, taču tiem ir kopīgs saimniekdatora OS kodols.
  17. Kas ir pamata attēls programmā Docker?
  18. Pamatattēls ir sākumpunkts Docker konteineru veidošanai, kas bieži ietver OS un pamata atkarības.

Docker un virtuālo mašīnu apkopojums

Salīdzinot Docker un virtuālās mašīnas, galvenā atšķirība ir to resursu izmantošanā un izvietošanas efektivitātē. Virtuālās mašīnas darbojas ar pilnu viesu operētājsistēmu un hipervizoru, kas palielina resursu patēriņu. Un otrādi, Docker konteineri koplieto resursdatora OS kodolu, tādējādi nodrošinot vieglāku un veiklāku risinājumu. Docker nodrošina izolētas vides, izmantojot slāņveida failu sistēmu un tīkla nosaukumvietas, ļaujot tam nodrošināt līdzīgas funkcijas virtuālajām mašīnām bez saistītām pieskaitāmajām izmaksām. Tas padara programmatūras izvietošanu Docker attēlos efektīvāku, konsekventāku un vieglāk pārvaldāmu dažādās ražošanas vidēs.

Pēdējās domas par Docker un virtuālajām mašīnām

Visbeidzot, Docker konteinerizācijas izmantošana piedāvā ievērojamas priekšrocības salīdzinājumā ar tradicionālajām virtuālajām mašīnām, samazinot resursu izmantošanu un vienkāršojot izvietošanas procesus. Kopīgojot resursdatora OS kodolu un izmantojot izolētas failu sistēmas un tīklu, Docker nodrošina stabilu, taču vieglu risinājumu mūsdienīgai lietojumprogrammu izvietošanai. Izpratne par šīm atšķirībām var palīdzēt izstrādātājiem izvēlēties savām vajadzībām piemērotāko rīku, nodrošinot efektīvu un mērogojamu lietojumprogrammu pārvaldību.