---
title: 'Dockerfile: Повне керівництво для початківців та професіоналів | Zomro'
description: 'Розуміння Dockerfile та вміння його правильно використовувати — це основа для ефективного використання Docker.'
image: 'https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/dalle-2024-07-08-210308-a-minimalist-rectangular-widescreen-infographic-in-pink-and-purple-colors-themed-around-dockerfile_-complete-guide-for-beginners-and-professionals_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/ua/)
  * [FAQ](https://zomro.com/ua/blog/faq/)
  * Dockerfile: Повне керівництво для початківців та професіоналів 



# Dockerfile: Повне керівництво для початківців та професіоналів

08-07-2024

![Dockerfile: Повне керівництво для початківців та професіоналів - 1](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/dalle-2024-07-08-210308-a-minimalist-rectangular-widescreen-infographic-in-pink-and-purple-colors-themed-around-dockerfile_-complete-guide-for-beginners-and-professionals_q50.jpg)

**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: Повне керівництво для початківців та професіоналів - 2](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/01_frpnJ5V_q50.jpg)

  
**Детальний розбір 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: Повне керівництво для початківців та професіоналів - 3](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/011_q50.jpg)

**Використання Dockerfile**

Тепер, коли ми розглянули основні інструкції і розглянули приклад **Dockerfile** , перейдемо до практичного використання. Для створення образу **Docker** і запуску контейнера необхідно виконати кілька команд у терміналі.

Переконайтеся, що файли **app.js** , **package.json** і **Dockerfile** знаходяться в одній директорії. Потім створіть образ.

**Створення образу:**
    
    
    docker build -t my-node-app .

Тут**-t my-node-app** вказує ім'я образу, а**.** вказує, що **Dockerfile** знаходиться в поточній директорії.

![Dockerfile: Повне керівництво для початківців та професіоналів - 4](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/02_VwK1Dib_q50.jpg)

**Запуск контейнера:**
    
    
    docker run -p 3000:3000 my-node-app

Команда **docker run** запускає контейнер на основі створеного образу. Параметр **-p 3000:3000** вказує, що порт **3000** на хост-машині буде перенаправлений на порт **3000** в контейнері. Ваш сервер повинен успішно запуститися, і ви зможете отримати доступ до нього, відкривши в браузері **http://localhost:3000**. Де побачите банальне привітання**"Hello, World!"**.

![Dockerfile: Повне керівництво для початківців та професіоналів - 5](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/03_CRPsR7Y_q50.jpg)

![Dockerfile: Повне керівництво для початківців та професіоналів - 6](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2024/07/08/04_kxzdzml_q50.jpg)​​​​​​​

**Висновок**

**Dockerfile** — це потужний інструмент для автоматизації та стандартизації процесу створення **Docker-образів**. Розуміння основних інструкцій і принципів роботи з **Dockerfile** дозволяє розробникам ефективно управляти середовищами і розгортати застосунки в контейнерах. Важно пам'ятати, що **Dockerfile** повинен бути оптимізованим і містити тільки необхідні команди для мінімізації розміру образу та підвищення продуктивності контейнерів.

Схожі статті

[Як встановити ISPmanager на Cloud VPS](https://zomro.com/ua/blog/faq/598-how-to-install-ispmanager-on-cloudvps) [Як замовити віртуальний сервер у новій білінговій системі](https://zomro.com/ua/blog/faq/229-kak-zakazat-server-v-novom-billinge) [Створення сервера Minecraft Bedrock](https://zomro.com/ua/blog/faq/330-creating-minecraft-bedrock-server) [Як змінити версію PHP у панелі HestiaCP?](https://zomro.com/ua/blog/faq/246-kak-smenit-versiju-php-v-paneli-hestiacp) [Встановлення MetaTrader 4/5 на сервері Zomro](https://zomro.com/ua/blog/faq/648-installing-metatrader-45-on-the-zomro-server)

[ Premium Cloud VPS від €7.95/міс ](/ua/vps)
