Как работает Dockerfile

На список статей
Blog image

Защитите свои сайты с My-Sites-Guard.com!
Сервис обеспечивает надежную защиту ваших веб-ресурсов: мониторинг доступности сайта, контроль валидности сертификатов, а также возможность собирать и анализировать логи работы сервера. My-Sites-Guard.com — всё для сохранности вашего сайта и спокойствия в работе!

Dockerfile — это текстовый файл, содержащий инструкции для создания Docker-образа. Эти образы затем можно использовать для создания контейнеров, в которых запускаются приложения и сервисы. Благодаря Dockerfile можно автоматически собирать образы, настроенные под конкретные задачи, с учётом всех зависимостей и конфигураций.

В этой статье мы рассмотрим, как работает Dockerfile, разберём его основные инструкции и приведём примеры создания простого Docker-образа.

Что такое Dockerfile?

Dockerfile — это сценарий, описывающий шаги для создания Docker-образа. Каждая строка в Dockerfile — это инструкция, которая указывает Docker, какие действия нужно выполнить для создания образа. На основе этого файла создаются образы, которые потом можно использовать для развертывания контейнеров.

Используя Dockerfile, вы можете:

  • Определить базовый образ, на основе которого будет строиться ваше приложение.
  • Установить зависимости и программы.
  • Настроить параметры среды и конфигурации.
  • Определить команды, которые будут запускаться при старте контейнера.

Основные инструкции Dockerfile

Каждая строка в Dockerfile — это инструкция, которая описывает определённое действие. Рассмотрим самые распространённые инструкции и их использование.

1. FROM

Инструкция FROM указывает базовый образ, на основе которого будет строиться новый образ. Это всегда первая строка в Dockerfile, и она определяет операционную систему или среду, в которой будет работать приложение.

Пример:

FROM ubuntu:20.04

Этот пример указывает, что базой для образа будет Ubuntu версии 20.04.

2. RUN

Инструкция RUN используется для выполнения команд внутри контейнера во время его сборки. Это могут быть команды установки программного обеспечения, копирования файлов и любые другие команды, которые можно выполнить в командной строке.

Пример:

RUN apt-get update && apt-get install -y nginx

Этот пример обновляет список пакетов и устанавливает веб-сервер Nginx в контейнере.

3. COPY

Инструкция COPY копирует файлы или директории с локальной машины (где создаётся образ) в файловую систему контейнера.

Пример:

COPY ./index.html /var/www/html/

Этот пример копирует локальный файл index.html в директорию /var/www/html/ внутри контейнера.

4. WORKDIR

Инструкция WORKDIR задаёт рабочую директорию для последующих инструкций в Dockerfile. Это аналог команды cd в терминале.

Пример:

WORKDIR /app

После этого все команды будут выполняться в директории /app.

5. CMD

Инструкция CMD задаёт команду, которая будет выполнена при запуске контейнера. В отличие от RUN, которая выполняется во время сборки образа, CMD выполняется только при запуске контейнера.

Пример:

CMD ["nginx", "-g", "daemon off;"]

Этот пример указывает, что при запуске контейнера будет запущен Nginx.

6. EXPOSE

Инструкция EXPOSE информирует Docker о том, что контейнер слушает определённые порты. Однако это просто декларация — порт по факту не открывается для внешнего мира, если не использовать флаг -p при запуске контейнера.

Пример:

EXPOSE 80

Этот пример указывает, что контейнер использует порт 80 (обычный порт для веб-серверов).

7. ENV

Инструкция ENV позволяет задавать переменные окружения, которые будут доступны в контейнере.

Пример:

ENV APP_NAME=myapp

Теперь переменная APP_NAME доступна в контейнере.

8. ENTRYPOINT

Инструкция ENTRYPOINT определяет команду, которая будет выполнена при запуске контейнера, как и CMD, но ENTRYPOINT задаёт неизменную команду. В отличие от CMD, параметры для ENTRYPOINT можно передавать при запуске контейнера.

Пример:

ENTRYPOINT ["python3", "app.py"]

Пример простого Dockerfile

Теперь, когда мы разобрали основные инструкции, давайте создадим простой Dockerfile для Node.js-приложения.

# Базовый образ Node.js
FROM node:14

# Создаём директорию для приложения
WORKDIR /usr/src/app

# Копируем package.json и устанавливаем зависимости
COPY package*.json ./
RUN npm install

# Копируем исходный код приложения
COPY . .

# Открываем порт 8080
EXPOSE 8080

# Запускаем приложение
CMD ["npm", "start"]

Этот Dockerfile делает следующее:

  1. Использует образ Node.js версии 14.
  2. Создаёт рабочую директорию /usr/src/app.
  3. Копирует файлы package.json и устанавливает зависимости.
  4. Копирует весь исходный код в контейнер.
  5. Открывает порт 8080 для доступа к приложению.
  6. Запускает команду npm start для запуска приложения.

Как создать образ с Dockerfile

Теперь, когда у нас есть Dockerfile, мы можем использовать его для создания Docker-образа. Это делается с помощью команды docker build.

  1. Перейдите в директорию с вашим Dockerfile.
  2. Выполните команду:
docker build -t mynodeapp .

Здесь -t mynodeapp задаёт имя создаваемого образа. Точка (.) указывает на текущую директорию, в которой находится Dockerfile.

После завершения сборки вы можете увидеть свой новый образ, выполнив команду:

docker images

Как запустить контейнер из образа

Теперь, когда образ создан, его можно использовать для запуска контейнера. Для этого используйте команду docker run.

Пример:

docker run -p 8080:8080 mynodeapp

Флаг -p 8080:8080 связывает порт 8080 контейнера с портом 8080 на хосте. Теперь ваше приложение будет доступно по адресу http://localhost:8080.

Заключение

Dockerfile — это мощный инструмент, который позволяет автоматизировать создание контейнеров с нужной вам конфигурацией. С помощью Dockerfile можно описывать все необходимые шаги для сборки вашего приложения, включая установку зависимостей, копирование файлов и настройку среды. Это делает Dockerfile идеальным решением для развертывания приложений в различных средах, от локальной разработки до облачных платформ.

Комментарии

Пока нет комментариев

Добавить комментарий