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