uz
KA
июня 23, 2025
Обновлено июня 23, 2025

Что такое Dockerfile и как его написать?

Docker Linux

Для автоматизации задач развертывания многие активно используют Docker, скачивая готовые образы с Docker Hub. Они экономят тучу времени, поднимутся с вероятностью 90%, а так же легки в конфигурации. Но что если ни один из существующих образов не подходит? Или нужно создать свой, который автоматизирует работу по действиям на машине?

Для этого, как раз существует Dockerfile, который позволяет определить порядок действий и сформировать слоями новую структуру файловой системы. Но обо всем по прядку в материале ниже!

Что такое Dockerfile?

Dockerfile – это текстовый документ, который содержит инструкции для создания образа, иначе говоря скрипт. Именно он позволяет автоматизировать развертывание сервисов и ПО. Роль его заключается в внесении изменений в стандартную файловую систему ОС, после чего она может запускаться с внесенными изменениями в изолированной среде!

Слои файловой системы
Скриншот №1 — Слои файловой системы

Слева видны слоя или действия выполняемые на ОС, а справа сами файлы ОС, где они и применяются. Алгоритм состоит из следующих шагов:

  1. Составляется Dockerfile, где прописываются действия, которые необходимо выполнить;
  2. Пользователь вызывает команду клиента Docker для сборки образа: docker build;
  3. Демон получает запрос от клиента и начинает формировать образ на основе минимальной ОС;
  4. После создания образ или же слепок файловой системы, будет отправлен в хранилище демоном;
  5. При создании контейнера, он будет вызван и развернут в изолированной среде.

Представим, что нам необходимо создать свой образ по развертке сервиса базы данных, который будет использоваться, как сервер не в кластере.

Создаем свой Dockerfile

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

Dockerfile
Скриншот №2 — Dockerfile

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

  • FROM эта команда позволяет определить, то какой образ будет взят в основу для работы. В нашем случае Ubuntu последней версии;
  • COPY позволяет копировать файлы из хостовой машины в гостевую;
  • CMD команда, которая выполнится, при загрузке контейнера;
  • RUN эта команда запустит ваш код в оболочке на машине, при работе, обычная инструкция скрипта;
  • ENV задаст переменную среду, которую можно будет использовать в работе;
  • USER переключится на пользователя, при выполнении;
  • WORKDIR установит рабочую директорию, где будут выполняться последующие команды.

Обратите внимание! Что скрипт выполняется последовательно, а это значит действия до USER будут выполняться от лица root-пользователя, остальные от указанного для них выше. Та же самая деталь касается и рабочей директории.

Если проходиться кратко по скрипту, то можно выделить три основных блока. В первом от лица root выполнялись предустановочные действия: установка ПО, создание пользователя, группы, а так же переключение на пользователя. После когда все зависимости были установлены, от лица mysql пользователя выполнили загрузку публичного ключа ЭЦП и прописали репозитории. А уже в 3 этапе установили ПО и открыли порт на машине для подключения.

Создадим образ под названием gg с помощью утилиты docker:

sudo docker build -t gg .

Опция -t обозначает название будущего образа, а точка указывает на текущую директорию, где нужно найти Dockerfile.

Новый образ
Скриншот №3 — Новый образ

После недолгих манипуляций получаем ответ, что Docker-образ сформирован и готов к использованию. Теперь мы можем его либо выгрузить в репозиторий, либо использовать для создания контейнеров. Именно в таком виде обычно распространяют готовые решения для развертывания. Создадим для него контейнер и запустим командой:

sudo docker run -d -it gg && sudo docker ps
Новый контейнер
Скриншот №4 — Новый контейнер

Как видим контейнер с образом запустился и успешно работает, с проброшенным портом и выполненной командой автозагрузки. Но есть и другой способ создания, сразу с контейнером. Для этого воспользуемся Docker Compose, утилитой оркестрации контейнеров Docker, а точнее ее конфигурационным файлом. Где укажем, что образ сначала нужно создать, а потом на основе его запустить контейнер.

Такой способ позволяет решить проблему конфигурации. Не все системы и сервисы могут гибко настраиваться через Docker Compose файл, поэтому иногда необходимо настроить конфиг нужного сервиса или ПО, а потом уже забилдить образ. Создадим docker-compose.yml файл:

sudo nano docker-compose.yml

Внутрь файла пропишем на языке разметки следующие параметры для запуска контейнера:

version: '3.8'
services :
app :
build:
context:
dockerfile: Dockerfile
container_name: my_app_container
ports :
- "3306:3306"
environment :
- ENV_VAR=value
tty: true
stdin_open: true
restart: always
Файл конфиг контейнера
Скриншот №5 — Файл конфиг контейнера

Пункт build позволяет определить директорию, где лежит Dockerfile и его название ниже. После чего уже конфигурируется сам контейнер: пробрасываются порты, задается имя, переменные среды и тд. Запустим контейнер командой:

sudo docker-compose up -d
Запуск контейнера
Скриншот №6 — Запуск контейнера

В результате получаем запущенный сервис в виртуальной среде, который мы описали в пару строк. Повторим, что Dockerfile используется для создания образа, а Docker compose для конфигурации контейнера. Как раз эти два файла позволяют автоматизировать процесс развертывания и скорость установки сервиса до двух команд вместо десятка.

При нехватке собственных мощностей можно воспользоваться облачными серверами от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:

Создание сервераСкриншот №7 — Создание сервера

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...