Рецеп запуска нужной версии GraphicsMagick в докере (для Ubuntu, LinuxMint, на винде принцип думаю похож)

Этот рецепт подойдет если в системе еще не установлен GraphicsMagick (если установлен можно переименовать бинарник).

Мне это понадобилось потому что на рабочем сервере установлена версия 1.3.8 но её я найти не смог и на рабочем сервере ее менять нельзя по причине "работает не трожь", но сайт развернуть локально нужно, а без GraphicsMagick сайт полноценно не обрабатывает картинки.

Итак:

Создаём docker compose config yml за пределами проекта, чтобы гит его не отслеживал ибо на каждом компе по разному будет всё. Ниже пример моего конфига `my-graphicsmagick-docker-compose.yml`.

```yml services: graphicsmagick: container_name: graphicsmagick-1.3.8 image: codezys/graphicsmagick-layer:1.3.8 # Add a command to prevent the container from exiting immediately command: ["tail", "-f", "/dev/null"] restart: no volumes: - /<абсалютный_путь_к_папке>/uploads:/<абсалютный_путь_к_папке>/uploads # Maps your current host folder to the container working_dir: /<абсалютный_путь_к_папке>/uploads networks: - my-global-graphicsmagick-net networks: my-global-graphicsmagick-net: name: my-global-graphicsmagick-net driver: bridge ```

Запускаем его

docker compose -f my-graphicsmagick-docker-compose.yml up -d​

Cледующий шаг:
Создаём файл `sudo /usr/bin/gm` и добавляем в него ссылку на докерконтейнер в котором запущен GraphicsMagick

```bash #!/bin/bash # Redirects all arguments to the running Docker container docker exec -i graphicsmagick-1.3.8 gm "$@" ```

Делаем файл исполняемым

sudo ogu+x /usr/bin/gm

Всё!

Проверяем в консоли `gm -version` должен показать версию.

Опасные моменты

Создаём исполняемый скрипт вручную в рут области /usr/bin, который будет мимикрировать команду gm и перенаправлять её вызов в запущенный докер контейнер.
Момент опасный потому что:

1) Если уже есть файл `/usr/bin/gm` то его придется удалить и перестанет быть доступным уже установленная в системе утилита GraphicsMagick. (её можно не удалять, а переименовать и когда она понадобиться вернуть обратно).

2) Есть вероятность, что можно забыть о том что файл `/usr/bin/gm` создавался вручную тобой и потом удивляться почему он работает не так как надо или вовсе не работает. Например если забыл запустить докер контейнер, то не будет работать и т.д. и т.п.

3) Если забыть и через время установить GraphicsMagick штатным способом через `apt install gm` то вероятно он затрётся или будет какае-то ошибка и придётся мучаться опять.

Плюсы/Минусы

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

Минусы довольно сложно и можно запутаться и забыть про то, что файл `/usr/bin/gm` создавался своими руками. Поэтому я и создал эту памятку. Чтобы помнить :)

4
1
3 комментария