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