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.
- Mikä on tärkein ero Dockerin ja virtuaalikoneiden välillä?
- 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.
- Miksi Docker-kontteja pidetään tehokkaampina?
- 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.
- Kuinka Docker saavuttaa tiedostojärjestelmän eristyksen?
- Docker käyttää kerrostettua tiedostojärjestelmää, jossa jokaisella säiliöllä on oma tiedostojärjestelmäkerros peruskuvan päällä.
- Mikä on hypervisor virtuaalikoneissa?
- Hypervisor on ohjelmisto, joka emuloi laitteistoa, jolloin useat käyttöjärjestelmät voivat toimia samanaikaisesti yhdellä isäntäkoneella.
- Miten Docker käsittelee verkon eristämistä?
- Docker käyttää nimiavaruuksia tarjotakseen erillisiä verkkoympäristöjä kullekin säilölle.
- Miksi ohjelmiston käyttöönotto Docker-kuvaan on helpompaa kuin virtuaalikoneeseen?
- Docker-kuvat kapseloivat kaikki riippuvuudet ja kokoonpanot varmistaen yhdenmukaisuuden eri ympäristöissä.
- Mitkä ovat yleisiä Dockerin käyttötapauksia?
- Dockeria käytetään yleisesti mikropalveluarkkitehtuurissa, jatkuvassa integraatiossa/jatkuvassa käyttöönotossa (CI/CD) ja eristetyissä kehitysympäristöissä.
- Voivatko Docker-säiliöt toimia missä tahansa käyttöjärjestelmässä?
- 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.
- Mikä on Dockerin peruskuva?
- 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.