Статья также доступна на украинском (перейти к просмотру).
Оглавление
В предыдущей статье мы изучили основные возможности платформы Docker. Ее использование для нужд автоматизации управления разветвленными приложениями позволяет экономить ресурсы и повысить скорость обработки кода. Однако для реализации всего потенциала программы необходимо создать соответствующие предпосылки, а именно обеспечить корректное и без избыточного формирования шаблонов или образов для будущих контейнеров – носителей виртуальной среды исполнения кода. Существует несколько способов формирования шаблонов. Рассмотрим их и применим для решения конкретных задач.
Пути получения Docker образов
Образы Docker являются шаблонами для создания контейнеров. Из одного шаблона может быть получено множество контейнеров, количество которых ограничивается доступным объемом машинных ресурсов. Получить нужные шаблоны можно следующими способами:
- Скачать из общедоступного или частного официального реестра Docker-Hub;
- Сформировать и сохранить новый образ на основе внесенных изменений в контейнер;
- Настройка автоматического создания шаблонов с помощью файла инструкций Dockerfile.
Закачать из общедоступного реестра, обычно можно наиболее распространенные базовые образы, созданные на основе известного программного обеспечения (ПО). К примеру, это касается операционных систем или языков программирования. А потом формировать на их основе нужные конфигурации шаблонов. Также заранее можно создать нужные образы и поместить их в частный репозиторий, а затем использовать по мере необходимости.
Сформировать и сохранить новый образ на базе внесенных изменений можно сразу после включения контейнера. Затем необходимо модифицировать текущую конфигурацию контейнера под свои нужды и зафиксировать внесенные изменения путем сохранения нового образа под соответствующим именем. Можно создать множество таких модифицированных шаблонов, после чего сохранить их на локальной машине или закачать в репозиторий.
Автоматическое создание шаблонов можно настроить с помощью файла инструкций Dockerfile. Этот файл создается в текущей директории программы и запускается с помощью команды docker build. Таким образом происходит сбор нового шаблона на основе инструкций указанного файла. Он имеет текстовый формат и создается без расширения. Инструкции, содержащиеся внутри, обрабатываются поочередно – сверху вниз.
Указанный путь является приоритетным по сравнению с созданием образа на базе контейнера, поскольку, во-первых, все вносимые в конфигурацию изменения фиксируются в Dockerfile, что обеспечивает в дальнейшем их четкую регламентацию; во-вторых, какой бы ни был сложный образ, его всегда можно легко создать, даже в автоматическом режиме, запустив Dockerfile.Все это говорит о перспективности этого подхода при создании шаблонов, и поэтому в дальнейшем мы будем рассматривать только его.
Создание образов Docker с помощью Dockerfile
Все записи, содержащиеся в файле Dockerfile можно разделить на несколько категорий. Во-первых, это комментарии, обозначаемые символом «#»; во-вторых, это инструкции парсера, всегда содержащиеся в самом начале; в-третьих, это непосредственно команды, посредством которых и формируется новый образ. Хотя регистр написания команд не имеет значения для парсера, однако по предварительному согласию все они пишутся в верхнем регистре. Это сделано для повышения уровня восприятия кода при создании и чтении сценария для создания образа.
Базовые Docker-инструкции
Все команды можно разделить на несколько групп в зависимости от выполняемых ими функций. К первой группе относятся инструкции, способные образовывать слои в конечном виде. К ним относятся следующие инструкции:
- RUN – служит для запуска команд и установки пакетов внутри контейнера;
- FROM – задает исходное базовое ПО для формирования образа;
- COPY – копирует файлы и каталоги внутрь контейнера;
- ADD – выполняет те же функции, что и предыдущая команда, однако дополнительно выполняет и другие функции, например развертывание архивов и загрузку файлов по URL.
Вторую группу образуют те инструкции, с помощью которых выполняются настройки системы, добавляются метаданные и прочее. Примеры:
- LABEL – добавляет метаданные;
- WORKDIR – устанавливает рабочую директорию;
- ENV – создает переменную среды.
К третьей группе относятся средства для активации каких-либо действий, не предусматривающих образование новых слоев, например это может быть выполнение какой-либо команды при загрузке системы или открытии порта. Примеры:
- CMD – служит для указания команды и аргументов для ее запуска внутри контейнера;
- ENTRYPOINT – выполняет те же функции, что и предыдущая инструкция;
- EXPOSE – служит для открытия порта.
Любой образ создается на основе базового ПО, в качестве которого может выступать, например, операционная система или другое ПО. В соответствии с этим любой Dockerfile должен иметь в себе одну команду FROM, с помощью которой будет загружаться то же базовое ПО.
Практическая реализация проекта по созданию Docker-образа сервера Redis
Redis (Remote Dictionary Server) является сервером баз данных, обеспечивающим быстрый доступ к данным, хранящимся в компактном формате. Создадим его образ на основе ОС Ubuntu 22.04, то есть указанная ОС будет выступать в качестве базового ПО.
Для начала создадим рабочий каталог нашего проекта с именем redis_serv, в котором будут храниться все рабочие файлы, в частности, и Dockerfile. ДДля этого введем в терминале:
$ mkdir redis_serv
Перейдем к созданному каталогу:
$ cd redis_serv
С помощью редактора nano оздадим файл с именем Dockerfile, вставим в него следующий код:
FROM ubuntu:22.04 LABEL admin="alexandr7500@meta.ua" # Обновление пакетов, установка сервера баз данных redis, очистка кэша RUN apt-get update && apt-get install -y redis-server && apt-get clean # Определение порта для прослушивания сервером баз данных redis EXPOSE 6379 # Создание директории для сохранения постоянных данных VOLUME /my_dirdata # Определение команды (запуск сервера redis), которая всегда будет выполняться после запуска контейнера CMD ["redis-server", "--protected-mode no"] $ nano Dockerfile
Сохраним внесенные изменения (ctrl+Enter) и выйдем из редактора (ctrl+X).
Теперь попробуем собрать образ с помощью следующей команды:
$ docker build -t red .
Здесь параметр -t требуется для указания на наличие образа; red – это имя образа; символ «.» необходим для обозначения того, что мы ссылаемся на местонахождение файла Dockerfile в контексте формирования образа.
После запуска команды результат ее работы выглядит как на изображении. Можно убедиться, что все шесть инструкций нашего сценария успешно обработаны парсером. То есть образ с именем red был создан.
Теперь мы можем запустить контейнер с помощью команды Run. Введем в терминале:
$ docker run -d -p 6379:6379 --name redis red
Здесь параметр -d указывает программе, что контейнер должен запускаться в автономном режиме; параметр -p публикует на хостинге установленный порт №6379; параметр --name указывает на имя контейнера – redis; параметр red является именем созданного нами образа. Результат работы команды показан ниже.
Для того чтобы убедиться, что контейнер действительно запущен и работает, выведем список имеющихся в системе контейнеров с помощью следующей конструкции:
$ docker container ls
Как можно убедиться, контейнер работает на нашей машине. То есть наша задача успешно выполнена.
Кстати, если вам нужен сервер для работы с Docker, можем вам его предложить. С помощью нашего облачного VPS хостинга создать сервер из Docker можно через несколько минут. Помимо обязательного ПО на сервер также устанавливается Web-приложение Docker Portainer, с помощью которого управлять контейнерами можно через удобный web-интерфейс.
Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем-то ошиблись, или что-то пропустили?
Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.
Дата: 14.06.2023 Автор: Александр Ровник для FREEhost.UA
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus