Лучшая практика для создания минимального docker контейнера - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь создать контейнер docker для устаревшего приложения php / mysql, которое использует ffmpeg для транскодирования видео на лету. К тому времени, когда я настрою apache2, mysql и скомпилирую библиотеки Nvidia для ffmpeg, у меня останется изображение docker размером 10 ГБ +.

Я компилировал непосредственно на контейнере, что требует установки большого количества библиотек и инструментов. Это правильный способ сделать это?

Как лучше всего go создать минимальный контейнер docker в этой ситуации?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете разделить его на несколько этапов, например этапы компиляции и выполнения, например, для java -gradle:

FROM gradle as builder       // use base grale image
RUN /usr/bin/gradle bootJar  // build app
FROM openjdk:11-jre-slim     // use other base image
COPY --from=builder /path_to_builded/example-1.0.jar app.jar // copy file from prev step
CMD ["java", "-jar", "/app/app.jar"]  // run it

Этот пример не готов к работе, просто чтобы показать, как он работает.

0 голосов
/ 27 апреля 2020

Один из распространенных способов уменьшения размера окончательного образа Dockerfile Best Practices ) в этой ситуации - выполнить все этапы компиляции (установить зависимости, собрать, скопировать двоичные файлы, очистить и удалить ненужные зависимости, очистить кэш) на одном одиночный RUN предложение.

Что-то вроде:

RUN apt update \
 && apt install -yq <any compile requirements>
 && <download source code> \
 && <compile dependencies> \
 && <copy compiled binaries> \
 && <remove source files>
 && apt purge -yq <any compile requirements>
 && apt clean \
 && rm -rf /var/lib/apt/lists/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...