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 ინსტრუქციების რაოდენობის მინიმიზაციას და ბრძანებების წესრიგის ოპტიმიზაციას მაქსიმალური კეშირებისთვის.