შესვლა
    opened image

    Dockerfile: სრულყოფილი სახელმძღვანელო დამწყებთათვის და პროფესიონალებისთვის

    ​​​​​​​

     

     

    Docker — ეს არის ძლიერი ინსტრუმენტი კონტეინერების შექმნის, განთავსების და მართვისთვის, რომელიც გახდა დეფაქტო სტანდარტი პროგრამული უზრუნველყოფის განვითარების ინდუსტრიაში. ერთ-ერთი მთავარი ელემენტი Docker-ში არის Dockerfile — ტექსტური ფაილი, რომელიც შეიცავს ინსტრუქციებს Docker-ის იმიჯის შესაქმნელად. Dockerfile-ის გაგება და მისი სწორად გამოყენება — ეს არის საფუძველი ეფექტური გამოყენებისთვის Docker-ის.

     

    რა არის Dockerfile?
     

    Dockerfile — ეს არის სკრიპტი, რომელიც შეიცავს ბრძანებების და ინსტრუქციების ნაკრებს Docker-იმიჯის შესაქმნელად. Docker-იმიჯი, თავის მხრივ, არის შეუცვლელი შაბლონი, რომელიც მოიცავს ყველაფერს, რაც საჭიროა კონტეინერის გაშვებისათვის: ოპერაციული სისტემა, ბიბლიოთეკები, დამოკიდებულებები და თვით აპლიკაცია.

     

     

    Dockerfile-ის ძირითადი ინსტრუქციები
     

     

    დავიწყოთ ძირითადი ინსტრუქციების განხილვით, რომლებიც გამოიყენება Dockerfile-ში:

     

    FROM: ეს ინსტრუქცია განსაზღვრავს ბაზის იმიჯს, რომლის საფუძველზე შეიქმნება ახალი იმიჯი. მაგალითად, FROM ubuntu:20.04 მიუთითებს, რომ ბაზის იმიჯი იქნება Ubuntu 20.04.

    RUN: გამოიყენება ბრძანებების შესასრულებლად კონტეინერში. ჩვეულებრივ გამოიყენება პაკეტების ინსტალაციისა და სხვა ოპერაციების შესასრულებლად, რომლებიც საჭიროა გარემოს მომზადებისთვის.

    CMD: განსაზღვრავს ბრძანებას, რომელიც შესრულდება კონტეინერის გაშვებისას. განსხვავებით RUN-ისგან, ეს ბრძანება არ შესრულდება იმიჯის შეკრების დროს, არამედ მხოლოდ კონტეინერის გაშვებისას.

    ENTRYPOINT: საშუალებას გაწვდოს ბრძანება, რომელიც ყოველთვის შესრულდება კონტეინერის გაშვებისას. შეიძლება გადაეწეროს კონტეინერის გაშვებისას ბრძანების ხაზის პარამეტრებით.

    COPY და ADD: ეს ინსტრუქციები გამოიყენება ფაილების და დირექტორიების კოპირებისათვის ადგილობრივი ფაილური სისტემიდან იმიჯის ფაილურ სისტემაში. COPY ახორციელებს უბრალო კოპირებას, ხოლო ADD შეიძლება დამატებით გააზრახოს ფაილები და ჩამოიწეროს ისინი URL-დან.

    ENV: ადგენს გარემოს ცვლადებს კონტეინერში.

    EXPOSE: მიუთითებს, რომელი პორტები იქნება გახსნილი კონტეინერში გარეგანი წვდომისთვის.

    VOLUME: ქმნის მთა-ქვედა წერტილს მუდმივი შენახვისთვის.

    WORKDIR: ადგენს სამუშაო დირექტორიას ყველა შემდგომი ინსტრუქციისთვის.

     

     

    Dockerfile-ის მაგალითი

     

    დავიწყოთ მარტივი მაგალითი Dockerfile Node.js აპლიკაციისთვის:

     

    # მიუთითებთ ბაზის იმიჯს
    FROM node:14
    
    # ვაწვდით სამუშაო დირექტორიას
    WORKDIR /app
    
    # ვაკოპირებთ package.json და package-lock.json
    COPY package*.json ./
    
    # ვაწვდით დამოკიდებულებებს
    RUN npm install
    
    # ვაკოპირებთ აპლიკაციის წყაროს კოდს
    COPY . .
    
    # მიუთითებთ პორტს
    EXPOSE 3000
    
    # განსაზღვრავთ ბრძანებას აპლიკაციის გაშვებისათვის
    CMD ["npm", "start"]
    

     

     

     


    Dockerfile-ის დეტალური ანალიზი:

    ​​​​​​​

    FROM node:14 — მიუთითებს, რომ ბაზის იმიჯი იქნება ოფიციალური Node.js იმიჯი ვერსია 14. ეს ნიშნავს, რომ ჩვენს იმიჯში იქნება ყველა საჭირო Node.js -ის დამოკიდებულება.

    WORKDIR /app — ადგენს სამუშაო დირექტორიას /app, სადაც კოპირდება ფაილები და შესრულდება ბრძანებები.

    COPY package.json ./* — კოპირებს ფაილებს package.json და package-lock.json სამუშაო დირექტორიაში კონტეინერის. ეს ფაილები შეიცავს ინფორმაციას აპლიკაციის დამოკიდებულებების შესახებ.

    RUN npm install — ასრულებს დამოკიდებულებების ინსტალაციას, რომლებიც მითითებულია package.json-ში.

    COPY . . — კოპირებს ყველა ფაილსა და საქაღალდეს მიმდინარე დირექტორიიდან (სადაც მდებარეობს Dockerfile) სამუშაო დირექტორიაში კონტეინერის.

    EXPOSE 3000 — მიუთითებს, რომ კონტეინერი მოისმენს პორტზე 3000.

    CMD ["node", "app.js"] — განსაზღვრავს ბრძანებას აპლიკაციის გაშვებისათვის. ამ შემთხვევაში ეს არის app.js ფაილის გაშვება Node.js-ით.


     

    შექმენით ფაილი app.js შემდეგი შინაარსით, ან გამოიყენეთ თქვენი:


     

    // app.js
    
    const express = require('express');
    const app = express();
    const port = 3000;
    
    app.get('/', (req, res) => {
      res.send('Hello, World!');
    });
    
    app.listen(port, () => {
      console.log(`Server is running on http://localhost:${port}`);
    });

     


    შექმენით ფაილი package.json შემდეგი შინაარსით:

     

    {
      "name": "my-node-app",
      "version": "1.0.0",
      "description": "A simple Node.js app with Express",
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      },
      "dependencies": {
        "express": "^4.17.1"
      }
    }

     

     

     

    Dockerfile-ის გამოყენება

     

    ახლა, როდესაც ჩვენ განვიხილეთ ძირითადი ინსტრუქციები და შევისწავლეთ Dockerfile-ის მაგალითი, გადავიდეთ პრაქტიკულ გამოყენებაზე. Docker-ის იმიჯის შექმნისა და კონტეინერის გაშვებისათვის საჭიროა რამდენიმე ბრძანების შესრულება ტერმინალში.

     

    დარწმუნდით, რომ ფაილები app.js, package.json და Dockerfile ერთ დირექტორიაში მდებარეობს. შემდეგ შექმენით იმიჯი.

     

    იმიჯის შექმნა:

     

    docker build -t my-node-app .

     

    აქ -t my-node-app განსაზღვრავს იმიჯის სახელს, ხოლო . მიუთითებს, რომ Dockerfile მდებარეობს მიმდინარე დირექტორიაში.

     

     

    კონტეინერის გაშვება:

     

    docker run -p 3000:3000 my-node-app

     

    ბრძანება docker run იწყებს კონტეინერს შექმნილი იმიჯის საფუძველზე. პარამეტრი -p 3000:3000 მიუთითებს, რომ პორტი 3000 მასპინძელ მანქანაზე გადაიყვანება პორტზე 3000 კონტეინერში. თქვენი სერვერი უნდა წარმატებით გაშვდეს, და თქვენ შეძლებთ მის მიღწევას, გახსნით ბრაუზერში http://localhost:3000. სადაც ნახავთ უბრალო მისალმებას "Hello, World!".

     

     

     

    ​​​​​​​

     

    დასკვნა

     

    Dockerfile — ეს არის ძლიერი ინსტრუმენტი Docker-იმიჯების შექმნის პროცესის ავტომატიზაციისა და სტანდარტიზაციისთვის. ძირითადი ინსტრუქციების და Dockerfile-თან მუშაობის პრინციპების გაგება საშუალებას აძლევს დეველოპერებს ეფექტურად მართონ გარემოები და განახორციელონ აპლიკაციები კონტეინერებში. მნიშვნელოვანია გახსოვდეთ, რომ Dockerfile უნდა იყოს ოპტიმიზირებული და შეიცავდეს მხოლოდ საჭირო ბრძანებებს იმიჯის ზომის შემცირების და კონტეინერების შესრულების გაზრდის მიზნით.