<!-- review: finished -->

<a id="docker-images"></a>

# Docker-образы Angie

Для запуска Angie в контейнере
[Docker](https://docs.docker.com/engine/reference/commandline/cli/)
используйте образы из нашего реестра: `docker.angie.software`.
Они собраны на основе наших [бинарных пакетов](https://angie.software//angie/docs/installation/oss_packages.md#oss-packages)
и официальных базовых образов ряда операционных систем.

#### NOTE
Также обратите внимание на модуль [Docker](https://angie.software//angie/docs/configuration/modules/http/http_docker.md#http-docker),
реализующий динамическое обновление групп проксируемых серверов
по Docker-меткам контейнеров.

<a id="minimal-images"></a>

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

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

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

<a id="docker-templated"></a>

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

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

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

```docker
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`:
  Позволяет запускать [отладочную версию](https://angie.software//angie/docs/troubleshooting.md#debug-logging).
- `ANGIE_ERROR_LOG_SEVERITY`:
  Определяет уровень детализации записей в основном файле [журнала ошибок](https://angie.software//angie/docs/configuration/processing.md#logging).
- `ANGIE_LOAD_MODULES`:
  Загружает один или несколько доступных модулей (все модули включены в образ).
  Укажите список модулей через запятую без пробелов.
- `ANGIE_PID_FILE`:
  Устанавливает альтернативное расположение файла идентификатора процесса
  (PID-файла).
- `ANGIE_FEATURE_TEMPLATE`:
  Генерирует [конфигурацию Angie](https://angie.software//angie/docs/configuration/configfile.md#configfile) с использованием инструмента
  [gomplate](https://docs.gomplate.ca/) при запуске контейнера. Используемые
  параметры: `--input-dir /etc/angie/templates` и
  `--output-dir /etc/angie`.
- `ANGIE_FEATURE_RELOAD`:
  Включает обработку сигналов `SIGHUP`, `SIGQUIT` и `SIGTERM`.

Сюда входят следующие
[пакеты](https://angie.software//angie/docs/installation/external-modules/index.md#install-thirdpartymodules)
(если они выпускались для [версии Angie](https://angie.software//angie/docs/oss_changes.md#oss-changes),
с которой собран образ):

### Список пакетов

- `angie-console-light`
- `angie-module-auth-jwt`
- `angie-module-auth-ldap`
- `angie-module-auth-pam`
- `angie-module-auth-spnego`
- `angie-module-auth-totp`
- `angie-module-brotli`
- `angie-module-cache-purge`
- `angie-module-cgi`
- `angie-module-combined-upstreams`
- `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-unbrotli`
- `angie-module-upload`
- `angie-module-vod`
- `angie-module-vts`
- `angie-module-wasm`
- `angie-module-wasmtime`
- `angie-module-xslt`
- `angie-module-zip`
- `angie-module-zstd`

<a id="examples-1"></a>

### Примеры

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

```none
...
{{- 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  ...
```

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

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

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

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

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

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

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

```console
$ docker kill -s HUP angie-test
```

<a id="images-with-extra-modules"></a>

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

- `angie:latest`:
  версия  на основе Alpine 3.22.
- `angie:<ВЕРСИЯ>`,
  `angie:<ВЕРСИЯ>-alpine`:
  указанная версия на основе Alpine 3.22.
- `angie:<ВЕРСИЯ>-debian`:
  указанная версия на основе Debian 13.
- `angie:<ВЕРСИЯ>-rocky`:
  указанная версия на основе Rocky Linux 9.
- `angie:<ВЕРСИЯ>-ubuntu`:
  указанная версия на основе Ubuntu 24.04 LTS.

Сюда входят следующие
[пакеты](https://angie.software//angie/docs/installation/external-modules/index.md#install-thirdpartymodules)
(если они выпускались для [версии Angie](https://angie.software//angie/docs/oss_changes.md#oss-changes),
с которой собран образ):

### Список пакетов

- `angie-console-light`
- `angie-module-auth-jwt`
- `angie-module-auth-ldap`
- `angie-module-auth-pam`
- `angie-module-auth-spnego`
- `angie-module-auth-totp`
- `angie-module-brotli`
- `angie-module-cache-purge`
- `angie-module-cgi`
- `angie-module-combined-upstreams`
- `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-unbrotli`
- `angie-module-upload`
- `angie-module-vod`
- `angie-module-vts`
- `angie-module-wasm`
- `angie-module-wasmtime`
- `angie-module-xslt`
- `angie-module-zip`
- `angie-module-zstd`

<a id="running"></a>

## Запуск

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

```console
$ 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/|version|
    Date: |sampledatelong| 10:42:54 GMT
    Content-Type: text/html
    Content-Length: 543
    Last-Modified: |sampledatelong| 09:12:23 GMT
    Connection: keep-alive
    ETag: "64c3ccc7-21f"
    Accept-Ranges: bytes
```

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

<a id="building-custom-images"></a>

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

Также можно самостоятельно определить образ
на основе поддерживаемого дистрибутива,
добавив слой Angie из [пакетов](https://angie.software//angie/docs/installation/oss_packages.md#oss-packages)
или [исходного кода](https://angie.software//angie/docs/installation/sourcebuild.md#sourcebuild).
Примеры соответствующих файлов `Dockerfile`:

```dockerfile
FROM debian:13

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;"]
```

```dockerfile
FROM alpine:3.22

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`
и запустить контейнер, как показано выше:

```console
$ 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
```
