Sobes.tech
Junior

Kas kõik käsud Dockerfile'is loovad kihte?

sobes.tech AI

Vastus AI-lt

Jah. Iga Dockerfile juhise loob uue kihi pildil, välja arvatud näiteks ARG, LABEL, ENV. Need juhised lisavad ainult metaandmeid või keskkonnamuutujaid, mõjutamata kihile failisüsteemi sisu.

Olulised juhised, mis loovad kihte:

  • FROM: Põhimõte, millest alustatakse ehitamist.
  • RUN: Käskude täitmine konteineris. Iga RUN juhis on eraldi kiht. Käskude ühendamine üheks RUN-iks && abil vähendab kihtide arvu.
  • COPY: Failide ja kataloogide kopeerimine hostist konteinerisse.
  • ADD: Sarnane COPY-le, kuid võib ka arhive välja pakkida ja faile URL-ide kaudu alla laadida.
  • WORKDIR: Töökataloogi muutmine järgmisteks juhisteks.
  • VOLUME: Montaažipunkti loomine.

Näide kihistuste demonstreerimiseks ehitamise ajal:

FROM ubuntu:latest

RUN apt-get update && apt-get install -y nginx

COPY index.html /var/www/html/

WORKDIR /app

CMD ["nginx", "-g", "daemon off;"]

Selle Dockerfile'i ehitamisel iga juhis FROM, RUN, COPY, WORKDIR, CMD (kuigi CMD ja ENTRYPOINT tehniliselt ei loo faili süsteemi kihti, vaid konfiguratsioonikihti) loob oma kihi, mida Docker vahemällu salvestab. Erinevat tüüpi juhised ja nende mõju kihtidele:

Juhis Loob faili süsteemi kihi? Mõju
FROM Jah Põhimõte pilt
RUN Jah Käskude täitmine
COPY Jah Failide kopeerimine
ADD Jah Failide kopeerimine (täiendavate võimalustega)
WORKDIR Jah Kataloogi muutmine
ENV Ei Keskkonnamuutujate seadistamine
ARG Ei Ehitusargumentide määratlemine
LABEL Ei Metadatanõu lisamine
VOLUME Jah Montaažipunktide määratlemine
USER Jah Kasutaja valimine
EXPOSE Ei Pordi avalikustamine
ENTRYPOINT Ei Käivitatava faili seadistamine
CMD Ei Käsk konteinri jaoks

Vähem kihte muudab pildid kergemaks ja kiiremini ehitatavaks, parandades vahemälu kasutust ja suuruse vähendamist. Dockerfile'i optimeerimine hõlmab sageli RUN juhiste arvu vähendamist ja käskude järjekorra optimeerimist, et maksimaalselt kasutada vahemälu.