Docker-образы Angie#

Для запуска Angie в контейнере Docker используйте образы из нашего реестра: docker.angie.software. Они собраны на основе наших бинарных пакетов и официальных базовых образов ряда операционных систем.

Минимальные образы#

  • angie:minimal: версия 1.8.0 на основе Alpine 3.21.

  • angie:<ВЕРСИЯ>-minimal: указанная версия на основе Alpine 3.21.

В состав этих образов входит только пакет angie.

Шаблонные образы#

  • angie:templated: версия 1.8.0 на основе Alpine 3.21.

  • angie:<VERSION>-templated: указанная версия на основе Alpine 3.21.

Эти образы задают следующие переменные окружения:

ENV ANGIE_BINARY="angie"
ENV ANGIE_CONFIG_TEMPLATE="/etc/angie/angie.conf.t"
ENV ANGIE_ERROR_LOG_SEVERITY="notice"
ENV ANGIE_FEATURE_RELOAD="on"
ENV ANGIE_FEATURE_TEMPLATE="on"
ENV ANGIE_LOAD_MODULES=""
ENV ANGIE_PID_FILE="/run/angie/angie.pid"
ENV ANGIE_WORKER_CONNECTIONS="65536"
ENV ANGIE_WORKER_RLIMIT_NOFILE="65536"

Эти переменные можно использовать для настройки работы контейнера:

  • ANGIE_BINARY: Позволяет запускать отладочную версию.

  • ANGIE_ERROR_LOG_SEVERITY: Определяет уровень детализации записей в основном файле журнала ошибок.

  • ANGIE_LOAD_MODULES: Загружает один или несколько доступных модулей (все модули включены в образ). Укажите список модулей через запятую без пробелов.

  • ANGIE_PID_FILE: Устанавливает альтернативное расположение файла идентификатора процесса (PID-файла).

  • ANGIE_FEATURE_TEMPLATE: Генерирует конфигурацию Angie с использованием инструмента gomplate при запуске контейнера. Используемые параметры: --input-dir /etc/angie/templates и --output-dir /etc/angie.

  • ANGIE_FEATURE_RELOAD: Включает обработку сигналов SIGHUP, SIGQUIT и SIGTERM.

Примеры#

Конфигурация, используемая в шаблонных образах, применяет переменные примерно следующим образом:

...
{{- if has $modules "zstd"}}
# пакет: angie-module-zstd
load_module modules/ngx_http_zstd_filter_module.so;
load_module modules/ngx_http_zstd_static_module.so;
{{end}}

user  angie;
worker_processes  auto;
worker_rlimit_nofile {{.Env.ANGIE_WORKER_RLIMIT_NOFILE}};

error_log  /var/log/angie/error.log {{.Env.ANGIE_ERROR_LOG_SEVERITY}};
pid        {{.Env.ANGIE_PID_FILE}};

events {
    worker_connections  {{.Env.ANGIE_WORKER_CONNECTIONS}};
}

http {
    include       /etc/angie/mime.types;
    default_type  application/octet-stream;

    log_format  main  ...

Запуск контейнера с доступом к командной оболочке:

$ docker run -it --pull always --rm --entrypoint=sh \
  docker.angie.software/angie:templated

Запуск Angie с пользовательскими параметрами подключений и модулями (команда angie -T выведет полную конфигурацию):

$ docker run -it --rm -e ANGIE_WORKER_CONNECTIONS=4 \
  -e ANGIE_LOAD_MODULES="auth-jwt,vod" \
  docker.angie.software/angie:templated angie -T

Запуск контейнера с указанием имени и дополнительных модулей:

$ docker run -it --rm --name angie-test \
  -e ANGIE_WORKER_CONNECTIONS=4 \
  -e ANGIE_LOAD_MODULES="auth-jwt,vod" \
  docker.angie.software/angie:templated

Перезагрузка конфигурации работающего контейнера:

$ docker kill -s HUP angie-test

Образы с дополнительными модулями#

  • angie:latest: версия 1.8.0 на основе Alpine 3.21.

  • angie:<ВЕРСИЯ>, angie:<ВЕРСИЯ>-alpine: указанная версия на основе Alpine 3.21.

  • angie:<ВЕРСИЯ>-debian: указанная версия на основе Debian 12.

  • angie:<ВЕРСИЯ>-rocky: указанная версия на основе Rocky Linux 9.

  • angie:<ВЕРСИЯ>-ubuntu: указанная версия на основе Ubuntu 24.04 LTS.

Сюда входят следующие пакеты (если они выпускались для версии Angie, с которой собран образ):

Список пакетов
  • angie-console-light

  • angie-module-auth-jwt

  • angie-module-auth-spnego

  • angie-module-brotli

  • angie-module-cache-purge

  • angie-module-dav-ext

  • angie-module-dynamic-limit-req

  • angie-module-echo

  • angie-module-enhanced-memcached

  • angie-module-eval

  • angie-module-geoip2

  • angie-module-headers-more

  • angie-module-http-auth-radius

  • angie-module-image-filter

  • angie-module-keyval

  • angie-module-lua

  • angie-module-modsecurity

  • angie-module-ndk

  • angie-module-njs

  • angie-module-opentracing

  • angie-module-otel

  • angie-module-perl

  • angie-module-postgres

  • angie-module-redis2

  • angie-module-rtmp

  • angie-module-set-misc

  • angie-module-subs

  • angie-module-testcookie

  • angie-module-upload

  • angie-module-vod

  • angie-module-vts

  • angie-module-wasm

  • angie-module-wasmtime

  • angie-module-xslt

  • angie-module-zip

  • angie-module-zstd

Запуск#

Чтобы запустить контейнер c Angie на 8080 порте, открыв ему доступ на чтение к каталогу со статическими файлами /var/www/ и файлу конфигурации angie.conf, лежащему в текущем рабочем каталоге:

$ docker run --rm --name angie -v /var/www:/usr/share/angie/html:ro \
    -v $(pwd)/angie.conf:/etc/angie/angie.conf:ro -p 8080:80 -d docker.angie.software/angie:latest

$ curl -I localhost:8080

    HTTP/1.1 200 OK
    Server: Angie/1.8.0
    Date: Thu, 19 Dec 2024 10:42:54 GMT
    Content-Type: text/html
    Content-Length: 543
    Last-Modified: Thu, 19 Dec 2024 09:12:23 GMT
    Connection: keep-alive
    ETag: "64c3ccc7-21f"
    Accept-Ranges: bytes

Подобная конфигурация подойдет для локальной разработки и настройки.

Сборка своих образов#

Также можно самостоятельно определить образ на основе поддерживаемого дистрибутива, добавив слой Angie из пакетов или исходного кода. Примеры соответствующих файлов Dockerfile:

Debian, сборка Angie из пакетов#
FROM debian:12

LABEL org.opencontainers.image.authors="Release Engineering Team <devops@tech.wbsrv.ru>"

ARG DEBIAN_FRONTEND=noninteractive

RUN set -x \
     && apt-get update \
     && apt-get install --no-install-recommends --no-install-suggests -y \
          ca-certificates curl \
     && curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg \
          https://angie.software/keys/angie-signing.gpg \
     && echo "deb https://download.angie.software/angie/$(. /etc/os-release && echo "$ID/$VERSION_ID $VERSION_CODENAME") main" \
          > /etc/apt/sources.list.d/angie.list \
     && apt-get update \
     && apt-get install --no-install-recommends --no-install-suggests -y \
          angie angie-module-geoip2 angie-module-njs \
     && rm -Rf /var/lib/apt/lists \
          /etc/apt/sources.list.d/angie.list \
          /etc/apt/trusted.gpg.d/angie-signing.gpg \
     && ln -sf /dev/stdout /var/log/angie/access.log \
     && ln -sf /dev/stderr /var/log/angie/error.log

EXPOSE 80

CMD ["angie", "-g", "daemon off;"]
Alpine, сборка Angie из пакетов#
FROM alpine:3.19

LABEL org.opencontainers.image.authors="Release Engineering Team <devops@tech.wbsrv.ru>"

RUN set -x \
     && apk add --no-cache ca-certificates curl \
     && curl -o /etc/apk/keys/angie-signing.rsa https://angie.software/keys/angie-signing.rsa \
     && echo "https://download.angie.software/angie/alpine/v$(egrep -o \
          '[0-9]+\.[0-9]+' /etc/alpine-release)/main" >> /etc/apk/repositories \
     && apk add --no-cache angie angie-module-geoip2 angie-module-njs \
     && rm /etc/apk/keys/angie-signing.rsa \
     && ln -sf /dev/stdout /var/log/angie/access.log \
     && ln -sf /dev/stderr /var/log/angie/error.log

EXPOSE 80

CMD ["angie", "-g", "daemon off;"]

Чтобы собрать образ myangie в каталоге с таким Dockerfile и запустить контейнер, как показано выше:

$ docker build -t myangie .
$ docker run --rm --name myangie -v /var/www:/usr/share/angie/html:ro \
    -v $(pwd)/angie.conf:/etc/angie/angie.conf:ro -p 8080:80 -d myangie