15 декабря 2021

Образ для Docker за 5 минут

Множество современных приложений сейчас запускаются в докере. При этом CI/CD они также проходят посредством докер-контейнера. Иногда новые функции могут потребовать добавить дополнительную функциональность в контейнер. Это делается довольно быстро.

1. Для начала нужно создать свой Dockerfile — это текстовый файл, содержащий команды для сборки. Docker позволяет делать сборку практически из любого другого контейнера, что сильно упрощает нам жизнь. Предположим, нам не хватает для CI-бэкенда установленной Node.JS Всё, что нам нужно — это взять текущий контейнер и добавить в него необходимые приложения. Вот пример такого файла

FROM kroncosta/qmis_1101:228

RUN apk add --update nodejs nodejs-npm

Здесь ключевое слово FROM указывает, на основе какого образа мы будем создавать свой новый контейнер. Для этого можно взять абсолютно любой образ.

Ключевое слово RUN при этом указывает, какую команду следует запустить внутри контейнера при сборке. Поскольку изначальный образ базировался на alpine-linux, то для установки пакета нам понадобится команда apk add. В образах, основанных на других дистрибутивах линукса команда для установки программ может отличаться.

2. После того, как мы приготовили Dockerfile можно запускать сборку. Самый простой вариант — перейти в папку с файлом в терминале(командной строке) и запустить команду docker build . — обратите внимание на один обязательный параметр — путь к файлу Dockerfile. Поскольку мы находимся в папке с этим файлом, то этот путь — точка (.)

3. После успешной сборки в списке образов докера добавится один безымянный образ (поскольку мы не указали имя при сборке). У этого образа не будет репозитория и тэга, а будет только IMAGE ID (просмотреть все присутствующие на компьютере образы можно командой docker images). Нам осталось лишь присвоить образу имя репозитория и тэг, чтобы запушить на docker-hub. Сделать это можно командой

docker tag 02c7adb3a987 othernik/skillbox:1.0

Здесь:

02c7adb3a987 — IMAGE ID созданного образа (у вас будет другой, но чуть похожий)

othernik/skillbox — Имя репозитория. Чаще всего оно состоит из вашего логина на сайте Docker Hub и имени репозитория.

1.0 — Собственно тэг. Образ может иметь несколько версий и с помощью тегов их можно разделять. После выполнения команды образ получит имя и тэг

4. Чтобы запушить наш образ на Docker Hub необходимо зарегистрироваться на этом сайте. После этого через терминал(командную строку) следует залогиниться там со своим логином и паролем с помощью команды docker login (вам нужно будет ввести свой логин и пароль). Затем нужно будет выполнить команду

docker push othernik/skillbox:1.0

всё, что после push (имя и тэг) будут именно такими, какие вы выбрали на предыдущем этапе.

— после этого образ будет опубликован на Docker Hub и его можно будет использовать где угодно (например при сборке CI)

P.S. Написано для сокурсников, но вероятно пригодится и кому-то ещё