Sobes.tech
Junior

Կատարում են բոլոր հրահանգները Dockerfile-ում շերտեր?

sobes.tech AI

Պատասխան AI-ից

Այո։ Յուրաքանչյուր հրահանգ Dockerfile- ում ստեղծում է նոր շերտ պատկերի մեջ, բացի օրինակներից՝ ARG, LABEL, ENV: Այս հրահանգները միայն ավելացնում են մետադատված կամ շրջակա միջավայրի փոփոխականներ, որոնք չեն ազդում շերտի ֆայլային համակարգի բովանդակության վրա:

Նպաստող հրահանգներ, որոնք ստեղծում են շերտեր՝

  • FROM: Հիմնական պատկերը, որի վրա սկսվում է կառուցումը:
  • RUN: Կատարում հրահանգներ կոնտեյներով: Ամեն RUN հրահանգը՝ առանձին շերտ: Համատեղելով հրահանգները մեկ RUN-ում &&-ով՝ կարելի է նվազեցնել շերտերի քանակը:
  • COPY: Ֆայլեր և დირექტորիաներ պատճենել հոստից կոնտեյներին:
  • ADD: Դիմում է COPY-ին, բայց նաև կարող է հանել արխիվներ և ներբեռնել ֆայլեր URL-ներից:
  • WORKDIR: Փոխել աշխատանքային დირექტորիան հաջորդ հրահանգների համար:
  • VOLUME: Ստեղծել մոնտաժման կետ:

Նմուշ՝ շերտերի ցուցադրում կառուցման ժամանակ:

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

Այս Dockerfile- ի կառուցման ժամանակ յուրաքանչյուր հրահանգ՝ FROM, RUN, COPY, WORKDIR, CMD (չնայած CMD և ENTRYPOINT տեխնիկապես չեն ստեղծում շերտ ֆայլային համակարգում, նրանք ստեղծում են կոնֆիգուրացիոն շերտ), ձևավորում է իր շերտը, որը Docker- ը կեշավորում է: Տարբեր հրահանգների տեսակներ և դրանց ազդեցությունը շերտերի վրա՝

Հրահանգ Ստեղծում է ֆայլային համակարգի շերտ? Տպավորություն
FROM Այո Հիմնական պատկերը
RUN Այո Հրամանների կատարմամբ
COPY Այո Ֆայլերի պատճենում
ADD Այո Ֆայլերի պատճենում (ավելացված հնարավորություններով)
WORKDIR Այո Դիրեկտորիայի փոփոխում
ENV Ոչ Շրջակա միջավայրի փոփոխականների սահմանում
ARG Ոչ Կառուցման արգումենտների սահմանում
LABEL Ոչ Մետադատվածների ավելացում
VOLUME Այո Մոնտաժման կետերի սահմանում
USER Այո Օգտագործողի ընտրություն
EXPOSE Ոչ Պորտերի հայտարարում
ENTRYPOINT Ոչ Կատարման ֆայլի կարգավորում
CMD Ոչ Կոնտեյների համար հրամանի կարգավորում

Փոքր շերտերի քանակը դարձնում է պատկերները ավելի թեթև և արագ կառուցվող՝ բարելավելով կեշավորումը և նվազեցնելով պատկերների չափը: Dockerfile-ի օպտիմալիզացիան հաճախ սահմանափակվում է RUN հրահանգների քանակի նվազեցմամբ և հրահանգների հերթականությամբ՝ առավելագույն կեշ օգտագործելու համար։