Docker образы для сборки redis под Ubuntu 16.04, 18.04.
Собранные пакеты помещаются в директорию /home/user/build внутри контейнера. Также сборка выполняется от имени пользователя с uid 1001. Поэтому у этого пользователя должны быть права на запись в эту директорию.
Таким образом нам нужно создать какую-либо папку, дать ей полные права и прокинуть внутрь контейрера в директорию /home/user/build.
При сборке в changelog добавляется новая собираемая версия, таким образом версия пакета будет взята из собираемой версии redis. Более подробно вы можете уточнить в скрипте docker-entrypoint.sh. Про то как изменить версию redis смотрите раздел Собрать определенную версию
Помимо control и changelog docker-entrypoint.sh также копирует конфиг для redis (redis.conf). Так как некоторые параметры по умолчанию странные, а именно damonisze no при том что в systemd конфиге стоит type=forking, в итоге при установке redis, получаем бесконечное зависание на systemctl start redis-server.
Например:
mkdir build
chmod 777 build
docker run --rm -v $PWD/build:/home/user/build tapclap/redis-build:ubuntu16.04 buildЕсли все прошло хорошо, в папке build будут нужные нам *.deb пакеты.
mkdir build
chmod 777 build
docker run --rm -v $PWD/build:/home/user/build tapclap/redis-build:ubuntu18.04 buildВерсия по умолчанию указана в Dockerfile в перемнной окружения REDIS_VERSION. Для того, чтобы ее переопределить, запустите со следующим параметром --env 'REDIS_VERSION=нужная_версия'. Например:
mkdir build
chmod 777 build
docker run --rm -v $PWD/build:/home/user/build --env 'REDIS_VERSION=5.0.1' tapclap/redis-build:ubuntu16.04 buildЗамечание: Архив скачивается из http://download.redis.io/releases/. Указанная вами версия должна там существовать.
Описание пакетов и changelog находятся в соотвесвтующих файлах (для Ubuntu 16.04: control_16.04, changelog_16.04. Для Ubuntu 18.04: control_16.04, changelog_16.04).
Будьте осторожны. changelog файл имеет определенную структуру. Постарайтесь ее соблюдать. Важен даже указываемый формат времени
Просто добавьте, то что вам требуется и запуште изминения в репозиторий. Образы пересоберутся по тригеру.
Заметьте: docker-entrypoint в changelog тоже добавляет описание поверх тех, что уже лежат в репозитории, во время сборки. То есть в changelog следует добавлять напирмер обновления из changelog официального пакета. Посмотреть его можно таким образом:
# Нужно чтобы redis-server был установлен из официальной репы
apt-get changelog redis-serverОбновите образы:
docker pull tapclap/redis-build:ubuntu18.04
docker pull tapclap/redis-build:ubuntu16.04Теперь последующие сборки, будут создавать пакеты с новым описанием.
Также можно собрать образы самому, а затем запушить на hub.docker.com
Для образа, который будет собирать пакеты для Ubuntu16.04:
docker build -t redis-build:ubuntu16.04 -f ./Dockerfile_16.04 ./
Для образа, который будет собирать пакеты для Ubuntu18.04:
docker build -t redis-build:ubuntu18.04 -f ./Dockerfile_18.04 ./
Теперь у Вас есть локально собранные образы, и Вы можете собирать пакеты redis с помощью них:
mkdir build
chmod 777 build
docker run --rm -v $PWD/build:/home/user/build redis-build:ubuntu16.04 buildСоздайте тэг, который укажет что образ принадлежит аккаунту tapclap.
docker tag redis-build:ubuntu16.04 tapclap/redis-build:ubuntu16.04
docker tag redis-build:ubuntu18.04 tapclap/redis-build:ubuntu18.04
Пуш
docker push tapclap/redis-build:ubuntu16.04
docker push tapclap/redis-build:ubuntu18.04