История о том, как начинающему DevOps инженеру выдали первое задание
Не так давно я устроился на работу, и моё первое задание было не самое простое. Нужно было создать образ Astra, которого не было в registry astra, загрузить в собственный Docker Registry и настроить на нём особую конфигурацию RabbitMQ.
Я очень долго искал в интернете информацию, были различные методы, через монтирование точек, прямое преобразование vmdk в docker-image, и тому подобное. Но я смог придумать более простой и быстрый способ, который позволит вам настраивать образ под себя во время создания.
Подготавливаем "архив"
Да, вам не показалось, мы будем делать именно архив, который потом преобразуем в docker image.
Для начала нам нужно создать два файла в которые мы напишем, какие директории включать, а какие исключать.
Создаем файл исключений:
sudo nano exclude.txt
И записываем туда следующие директории:
lib/modules
user/lib/libreoffice
user/lib/firefox
user/lib/firefox-addons
user/lib/firefox-esr
user/lib/thunderbird
user/share/doc/
user/share/libreoffice
user/share/libreoffice-astra
user/share/fonts
var/spool/libreoffice
Создаем файл включений:
sudo nano include.txt
И точно также записываем в него
bin
etc
lib
lib64
sbin
usr/bin
usr/include
usr/sbin
usr/share
usr/src
var
Делаем мы это для того, чтобы засунуть в архив, только те директории, что нам могу понадобиться, и исключить из этих директорий файлы, которые нам не нужны.
Создаем сам архив
Выполните в терминале
sudo tar czvf rootfc.tar.gz -X exclude.txt -C / -T include.txt
Где
tar - это команда, которая создает архив. Он изменяется каждой следующей буквой, каждая из которых объясняется ниже.
c - создать новый архив резервных копий.
v - подробный режим, tar будет печатать то, что он делает, на экране.
z - Сожмите файл резервной копии с помощью 'gzip', чтобы сделать его меньше.
f <имя_файла файла> - указывает, где хранить резервную копию, backup.tar.gz имя файла используется в данном примере. Он будет храниться в текущем рабочем каталоге, который вы установили при использовании команды cd.
rootfs.tar.gz - название архива (Можно задать любое .tar.gz)
-X - флаг который показывает, что мы исключаем директории из файла
-С - переносит наш архив в корневой каталог, чтобы не было ошибок и проблем с архивацией
-T - флаг который показывает, что мы включаем директории из файла
Это может занять некоторое время, у меня лично архивация была 5-7 минут
Переносим архив на Сервер с Docker Registry
Переносите любым удобным для вас приложением. Я лично использовал FilleZilla
Преобразуем архив в образ
cat rootfs.tar.gz | docker import - astra:latest
Команда cat весь архив выводит в консоль, а docker import весь вывод записывает в образ под именем astra:latest
- - указывает, что мы весь вывод записываем
Тегируем образ и пушим в Registry
docker tag astra:latest хост_машины:5000/my_vm_image_custom:latest
Таким образом задаём название для образа
Теперь можем отправить тегированный образ в наш Docker Registry
docker push хост_машины:5000/my_vm_image_custom:latest
Нюансы создания и настройки Docker Registry не буду здесь указывать, потому что статья не об этом
Проверим наличие нашего образа в Docker Registry
curl http://хост_машины:5000/v2/_catalog
должен быть подобный вывод
{"repositories":["astra"]}
Забираем образ к себе на Windows
docker pull хост_машины:5000/название_образа
Заключение
Таким образом я показал, как можно легко и быстро создать свой собственный образ специфичной ОС, которого нет в общем DockerHUB или в локальном Docker Registry.