Dockerin ja virtuaalikoneiden välisten erojen ymmärtäminen

Nodejs

Johdatus Dockeriin ja virtuaalikoneisiin

Docker- ja virtuaalikoneet (VM:t) ovat molemmat suosittuja työkaluja sovellusten käyttöönottoon, mutta ne toimivat pohjimmiltaan eri tavoin. Monet kehittäjät ovat ymmällään siitä, kuinka Docker voi tarjota täydellisen tiedostojärjestelmän, eristetyn verkkoyhteyden ja muita ominaisuuksia ilman virtuaalikoneisiin tyypillisiä lisäkustannuksia.

Tämän artikkelin tarkoituksena on selventää Dockerin ja perinteisten virtuaalikoneiden välistä eroa ja selittää, miksi Dockeria pidetään usein kevyempänä ja helpompia ottaa ohjelmistoja käyttöön. Tutustumme taustalla oleviin teknologioihin ja Dockerin käytön käytännön hyötyihin tuotantoympäristöissä.

Komento Kuvaus
FROM Määrittää Docker-säilön luomiseen käytettävän peruskuvan.
WORKDIR Asettaa työhakemiston Docker-säilön sisällä.
COPY Kopioi tiedostot tai hakemistot isäntäkoneesta Docker-säilöön.
RUN Suorittaa komennon Docker-säilössä rakennusprosessin aikana.
EXPOSE Ilmoittaa Dockerille, että säilö kuuntelee määritettyjä verkkoportteja suorituksen aikana.
CMD Määrittää komennon, joka suoritetaan Docker-säilön sisällä sen käynnistyessä.
config.vm.box Määrittää Vagrant-virtuaalikoneen peruslaatikon.
config.vm.network Konfiguroi verkkoasetukset, kuten porttien välittämisen isännästä virtuaalikoneeseen.
config.vm.provision Määrittää, kuinka virtuaalikoneen valmistetaan, esimerkiksi suoritetaan komentotulkkikomentosarjat asennuksen aikana.

Dockerfileen ja Vagrantfileen tutustuminen

Esitetyissä esimerkeissä osoitimme ensin, kuinka Docker-tiedosto luodaan Node.js-sovelluksen käyttöönottoa varten. Docker-tiedosto alkaa määrittämällä peruskuva -komento, tässä tapauksessa käyttämällä virallista Node.js-ajonaikaa. Säilön sisällä olevan työhakemiston asettaminen saavutetaan käyttämällä komento, joka varmistaa, että seuraavat komennot suoritetaan määritetyssä hakemistossa. The komentoa käytetään paketin.json-tiedostojen ja sovelluskoodin siirtämiseen säilöön. The RUN komento asentaa sitten tarvittavat riippuvuudet säilön sisään. Paljastamme portin, jota sovellus käyttää, käyttämällä komento ja lopuksi komento määrittää komennon käynnistää sovellus, kun säilö käynnistyy.

Vagrantfile-esimerkissä konfigurointi alkaa määrittämällä peruslaatikko komento, tässä Ubuntu 20.04. Verkkoasetukset määritetään käyttämällä -komento, joka välittää isännän portin 8080 vieras-VM:n porttiin 80, mikä mahdollistaa ulkoisen pääsyn virtuaalikoneella toimiviin palveluihin. The -komentoa käytetään komentosarjan suorittamiseen, joka päivittää pakettiluettelon ja asentaa Apache2:n ja varustaa virtuaalikoneeseen tarvittavan ohjelmiston. Nämä komennot esittelevät VM-ympäristön perustamisen perusvaiheet tarjoten perinteisemmän lähestymistavan Dockerin tarjoamaan konttiympäristöön verrattuna.

Docker-tiedoston luominen Node.js-sovellusten käyttöönottoa varten

Tämä esimerkki osoittaa, kuinka luodaan Docker-tiedosto Node.js-sovellukselle, ja esitellään vaiheet sovelluksen luomiseksi ja suorittamiseksi Docker-säilön sisällä.

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

Virtuaalikoneen asentaminen Vagrantin avulla

Tämä esimerkki näyttää, kuinka virtuaalikoneen määritetään käyttämällä Vagrantia yksinkertaisella Vagrant-tiedostolla, ja se näyttää virtuaalikoneympäristön määrittelyn ja konfiguroinnin.

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

Dockerin ja virtuaalikoneiden ymmärtäminen

Yksi tärkeimmistä eroista Dockerin ja virtuaalikoneiden (VM) välillä on siinä, kuinka ne käyttävät järjestelmäresursseja. Virtuaalikoneet toimivat hypervisorilla, joka emuloi laitteistoa ja sallii useiden käyttöjärjestelmien käytön samanaikaisesti isäntäkoneessa. Tämä edellyttää, että jokaisessa virtuaalikoneessa on täysi vieraskäyttöjärjestelmä, omat kirjastot ja binaarit. Tämä ei ainoastaan ​​kuluta merkittäviä järjestelmäresursseja, vaan lisää myös käyttöönoton ja ylläpidon kokonaiskokoa ja monimutkaisuutta.

Sitä vastoin Docker hyödyntää konttitekniikkaa, jonka avulla useat säilöt voivat jakaa saman käyttöjärjestelmän ytimen. Jokainen säilö toimii erillisenä prosessina käyttäjätilassa. Tämä tarkoittaa, että kontit ovat paljon kevyempiä ja nopeampia käynnistymään verrattuna virtuaalikoneisiin, koska niiden ei tarvitse käynnistää koko käyttöjärjestelmää. Docker saavuttaa tiedostojärjestelmän eristyksen kerrostetun tiedostojärjestelmän avulla, jossa jokaisella säiliöllä on oma tiedostojärjestelmäkerros peruskuvan päällä. Verkon eristäminen hoidetaan nimiavaruuksilla, jolloin Docker voi tarjota erillisiä verkkoympäristöjä kullekin säilölle ilman virtuaalikoneisiin liittyviä lisäkustannuksia.

  1. Mikä on tärkein ero Dockerin ja virtuaalikoneiden välillä?
  2. Docker käyttää konttia jakaa isäntäkäyttöjärjestelmän ytimen, mikä tekee siitä kevyemmän ja nopeamman, kun taas virtuaalikoneet vaativat täyden vieraskäyttöjärjestelmän ja hypervisorin.
  3. Miksi Docker-kontteja pidetään tehokkaampina?
  4. Säilöt jakavat isäntäkäyttöjärjestelmän ytimen ja niillä on minimaaliset lisäkustannukset, mikä mahdollistaa nopeammat käynnistysajat ja tehokkaan resurssien käytön.
  5. Kuinka Docker saavuttaa tiedostojärjestelmän eristyksen?
  6. Docker käyttää kerrostettua tiedostojärjestelmää, jossa jokaisella säiliöllä on oma tiedostojärjestelmäkerros peruskuvan päällä.
  7. Mikä on hypervisor virtuaalikoneissa?
  8. Hypervisor on ohjelmisto, joka emuloi laitteistoa, jolloin useat käyttöjärjestelmät voivat toimia samanaikaisesti yhdellä isäntäkoneella.
  9. Miten Docker käsittelee verkon eristämistä?
  10. Docker käyttää nimiavaruuksia tarjotakseen erillisiä verkkoympäristöjä kullekin säilölle.
  11. Miksi ohjelmiston käyttöönotto Docker-kuvaan on helpompaa kuin virtuaalikoneeseen?
  12. Docker-kuvat kapseloivat kaikki riippuvuudet ja kokoonpanot varmistaen yhdenmukaisuuden eri ympäristöissä.
  13. Mitkä ovat yleisiä Dockerin käyttötapauksia?
  14. Dockeria käytetään yleisesti mikropalveluarkkitehtuurissa, jatkuvassa integraatiossa/jatkuvassa käyttöönotossa (CI/CD) ja eristetyissä kehitysympäristöissä.
  15. Voivatko Docker-säiliöt toimia missä tahansa käyttöjärjestelmässä?
  16. Docker-säiliöt voivat toimia missä tahansa Dockeria tukevassa käyttöjärjestelmässä, mutta ne jakavat isäntäkäyttöjärjestelmän ytimen.
  17. Mikä on Dockerin peruskuva?
  18. Peruskuva on lähtökohta Docker-säilöjen rakentamiselle, joka sisältää usein käyttöjärjestelmän ja perusriippuvuudet.

Yhteenveto Docker vs. Virtual Machines

Dockeria ja virtuaalikoneita verrattaessa tärkein ero on niiden resurssien käytössä ja käyttöönottotehokkuudessa. Virtuaalikoneet toimivat täydellä vieraskäyttöjärjestelmällä ja hypervisorilla, mikä lisää resurssien kulutusta. Sitä vastoin Docker-säiliöt jakavat isäntäkäyttöjärjestelmän ytimen, mikä johtaa kevyempään ja ketterään ratkaisuun. Docker saavuttaa eristettyjä ympäristöjä kerrostetun tiedostojärjestelmän ja verkkonimiavaruuksien avulla, jolloin se voi tarjota samanlaisia ​​toimintoja kuin virtuaalikoneilla ilman niihin liittyviä lisäkustannuksia. Tämä tekee ohjelmistojen käyttöönotosta Docker-kuviin tehokkaampaa, johdonmukaisempaa ja helpommin hallittavaa eri tuotantoympäristöissä.

Yhteenvetona voidaan todeta, että Dockerin konttikäytön käyttö tarjoaa merkittävän edun perinteisiin virtuaalikoneisiin verrattuna minimoimalla resurssien käytön ja yksinkertaistamalla käyttöönottoprosesseja. Jakamalla isäntäkäyttöjärjestelmän ytimen ja hyödyntämällä eristettyjä tiedostojärjestelmiä ja verkkoa, Docker tarjoaa vankan mutta kevyen ratkaisun nykyaikaiseen sovellusten käyttöönottoon. Näiden erojen ymmärtäminen voi auttaa kehittäjiä valitsemaan oikean työkalun tarpeisiinsa, mikä varmistaa tehokkaan ja skaalautuvan sovellustenhallinnan.