JavaRush /Курси /Модуль 2: Fullstack /Основні інструкції Dockerfile

Основні інструкції Dockerfile

Модуль 2: Fullstack
Рівень 13 , Лекція 2
Відкрита

3.1 Інструкція FROM

Отже, нагадаю, Dockerfile — це текстовий файл, який містить інструкції для створення Docker-образу. Кожна інструкція в Dockerfile виконує певну задачу та створює новий шар в образі. У цій лекції ми детальніше розглянемо основні інструкції Dockerfile: FROM, RUN, COPY і CMD, які є ключовими для створення функціональних та ефективних Docker-образів.

Інструкція FROM задає базовий образ, з якого буде створено новий образ. Це перша інструкція в будь-якому Dockerfile, і вона визначає початкову точку для складання образу.

Синтаксис


FROM <image>[:<tag>] [AS <name>]

Де:

  • <image>: назва базового образу.
  • <tag>: (необов'язково) версія базового образу. За замовчуванням використовується latest.
  • AS <name>: (необов'язково) призначення імені для цього етапу збірки (використовується в багатоетапній збірці).

Приклади

Використання базового образу Ubuntu:

dockerfile


FROM ubuntu:20.04

Використання офіційного образу Node.js:

dockerfile


FROM node:14

Використання багатоетапної збірки для оптимізації:

dockerfile


FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

У цьому прикладі використовуються два базових образи. Перший (node:14) використовується для збірки застосунку, другий (nginx:alpine) — для створення легковісного сервера, який буде обслуговувати статичні файли.

Завдяки використанню багатоетапної збірки, кінцевий образ містить лише мінімальний набір файлів і програм (у цьому випадку Nginx і зібрані статичні файли), що робить його легшим і швидшим для розгортання.

3.2 Інструкція RUN

Інструкція RUN виконує команди всередині контейнера та створює новий шар у образі. Ця інструкція використовується для установки пакетів, налаштування середовища і виконання інших команд, необхідних для підготовки образу.

Синтаксис:


RUN <command>

Де:

  • <command>: команда, яка буде виконана всередині контейнера.

Приклади:

Установка пакетів у образі Ubuntu:

dockerfile


RUN apt-get update && apt-get install -y curl git

Компіляція коду:

dockerfile


RUN gcc -o myapp myapp.c

Об'єднання кількох команд

Для зменшення кількості шарів, зменшення розміру image та пришвидшення збірки рекомендується об'єднувати кілька команд у одну інструкцію RUN.

dockerfile


RUN apt-get update \
    && apt-get install -y curl git \
    && rm -rf /var/lib/apt/lists/*

3.3 Інструкція COPY

Інструкція COPY копіює файли та директорії з контексту збірки на файлову систему контейнера. Це корисно для перенесення вихідного коду, конфігураційних файлів та інших ресурсів у контейнер.

Синтаксис:


COPY <src> <dest>

Де:

  • <src>: шлях до файлів або директорій у контексті збірки.
  • <dest>: шлях призначення в контейнері.

Приклади:

Копіювання всього вмісту поточної директорії у робочу директорію контейнера:

dockerfile


COPY . /app

Копіювання окремих файлів:

dockerfile


COPY package.json /app/package.json
COPY server.js /app/server.js

Використання .dockerignore

Щоб виключити непотрібні файли з процесу копіювання, можна використовувати файл .dockerignore, який працює аналогічно .gitignore.

Text


node_modules
dist
*.log

3.4 Інструкція CMD

Інструкція CMD задає команду, яка буде виконана при запуску контейнера. На відміну від RUN, яка виконується на етапі збірки, CMD виконується при запуску контейнера з створеного образу.

Синтаксис:


CMD ["executable","param1","param2"]

Або


CMD command param1 param2

Де:

  • ["executable","param1","param2"]: форма exec, яка є більш переважною для забезпечення правильної обробки сигналів.
  • command param1 param2: форма shell, яка виконує команду в оболонці.

Приклади:

Запуск Node.js застосунку:

dockerfile


CMD ["node", "app.js"]

Запуск скрипта shell:

dockerfile


CMD /usr/bin/myscript.sh

Різниця між CMD та ENTRYPOINT

CMD задає команду за замовчуванням, яку можна перевизначити при запуску контейнера. ENTRYPOINT задає незмінну команду, яка завжди буде виконуватися при запуску контейнера.

Приклад використання ENTRYPOINT:

dockerfile


ENTRYPOINT ["python", "script.py"]
CMD ["arg1"]

У цьому прикладі ENTRYPOINT запускає Python-скрипт, а CMD передає аргументи, які можна змінити при запуску контейнера.

Приклад Dockerfile з основними інструкціями

dockerfile

        
# Використовуємо базовий образ Node.js
FROM node:14
        
# Встановлюємо робочу директорію
WORKDIR /app
        
# Копіюємо файли package.json і package-lock.json
COPY package*.json ./
        
# Встановлюємо залежності
RUN npm install
        
# Копіюємо вихідний код застосунку
COPY . .
        
# Вказуємо порт, який буде використовуватися застосунком
EXPOSE 3000
        
# Визначаємо команду для запуску застосунку
CMD ["node", "app.js"]
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ