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
RUNjuhis on eraldi kiht. Käskude ühendamine üheksRUN-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.