УВІЙТИ
    opened image

    ​​​​​​​

     

     

    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 повинен бути оптимізованим і містити тільки необхідні команди для мінімізації розміру образу та підвищення продуктивності контейнерів.