Найти в Дзене
ИТ разнообразно

Построение безопасных образов Docker для продакшн-среды — лучшие практики. Часть 1.

Оглавление

Современные приложения часто используют Docker как универсальный инструмент. Мы используем Docker для разработки и тестирования нашего приложения, а также для запуска его в продакшн-среде.

Вы когда-нибудь задумывались о безопасности контейнеров Docker в продакшене?

Хотя безопасность контейнеров - это обширная область, давайте сосредоточимся на создании более безопасных образов для развёртывания в продакшн-среде, не тратя часы на поиск лучших практик в Интернете.

В этой статье представлен простой подход для обнаружения потенциальных уязвимостей в ваших образах.

Базовый образ для разработки

Допустим, мы работаем над сервисом API, написанным на Rust. Репозиторий содержит Dockerfile с небольшим количеством инструкций. Это может выглядеть так:

FROM rust:1.70
EXPOSE 8000
COPY ./ ./
RUN cargo build --release
CMD ["./target/release/app"]

На первый взгляд файл выглядит просто. Docker Hub предлагает официальные образы почти для каждого языка программирования. В официальном образе Rust предустановлен полный набор инструментов. Мы можем сразу же использовать этот образ для компиляции и запуска проекта — идеально подходит для среды разработки.

Однако, как только мы переходим в продакшн, ситуация меняется.

Требования к продакшн-среде

Нам не нужен набор инструментов компилятора при работе с компилируемым языком. Бинарный файл Rust является автономным, для него требуется только среда выполнения libc (которая часто уже присутствует).

Мы могли бы рассмотреть возможность поставки только минимизированного пакета, чтобы уменьшить размер изображения для такого языка, как JavaScript.

Независимо от языка, с которым мы работаем, образ для продакшн-среды должен удовлетворять другим требованиям, чем образ для разработки, таким как установка конкретных версий пакетов, строгие разрешения и т. д.

Ещё один аспект — размер образа. Образ для разработки может легко занять много места на диске. Рассмотрим этот пример, где образ на основе rust:1.70 занимает 3 ГБ:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rust-dev latest 3ad31037e881 26 seconds ago 3.07GB

Набор инструментов компилятора занимает некоторое место, но скорее всего большую часть занимает папка с собранными артефактами. В продакшн-среде нам не нужно ни то, ни другое для запуска приложения.

Продолжение следует...

Перевод с некоторыми авторскими заголовками.

Автор оригинала: Jan Schulte.