Я работаю над проектом symfony с докером, и для того, чтобы иметь возможность создавать файлы PDF в проекте, мне нужно было установить SnappyBundle https://github.com/KnpLabs/KnpSnappyBundle. Для создания файлов pdf также необходимо установить wkhtmltopdf.
Вот что я сделал:
Я подключился к своему контейнеру приложения как root
docker exec -u root -t -i container_id /bin/bash
затем я установил два пакета
apt-get update
apt-get install wkhtmltopdf
apt-get install xvfb
Затем я изменил свой файл config.yml для выполнения wkhtmltopdf с xvfb
Таким образом, это работает, но есть ли способ просто автоматизировать установку этих пакетов с помощью моего docker-compose?
version: '2'
networks:
community:
external: true
services:
app:
build: docker/php72
working_dir: /var/www/app
networks:
community:
aliases:
- app
default:
aliases:
- app.myapp
volumes:
- .:/var/www/app
- ~/.composer:/var/www/.composer
dns:
- X.X.X.X
- X.X.X.X
- X.X.X.X
- X.X.X.X
web:
image: nginx:1-alpine
working_dir: /var/www/app
networks:
myapp:
aliases:
- app
default:
aliases:
- app.myapp
volumes:
- ./docker/nginx/app.conf:/etc/nginx/conf.d/default.conf:ro
- .:/var/www/app
- ./var/logs/nginx/:/var/log/nginx
expose:
- 80
depends_on:
- app
dns:
- X.X.X.X
- X.X.X.X
- X.X.X.X
- X.X.X.X
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: XXXX
MYSQL_USER: XXXX
MYSQL_PASSWORD: XXXX
MYSQL_DATABASE: XXXX
ports:
- "3306:3306"
networks:
community:
aliases:
- bdd
default:
aliases:
- bdd.myapp
dns:
- X.X.X.X
- X.X.X.X
- X.X.X.X
- X.X.X.X
Мой docker-compose выглядит так (я скрыл некоторую информацию)




Создайте файл с именем Dockerfile в том же месте, что и docker-compose.yml.
Это должно быть содержимое вашего файла докеров:
FROM docker/php72
RUN apt-get update && apt-get install -y wkhtmltopdf xvfb
затем измените службу приложения для создания докеров на:
app:
build: .
затем запустите docker-compose build, вы создадите новый образ докера с нужными вам зависимостями и запустите приложение оттуда.
Также небольшой совет: docker-compose exec service_name bash - это то же самое, что и docker exec -t -i container_id /bin/bash.
Спасибо, у меня это работает, но, есть ли более элегантный способ, это установит много неиспользуемой библиотеки .. :(
Удивительный. Спасибо