Nginx с Doker.

Встановимо проксі-сервер nginx apache з можливістю керувати змінними оточенням.

Створимо стартову сторінку index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Docker Nginx</title>
</head>
<body>
  <h2>Hello from Nginx container</h2>
</body>
</html>

Створимо файл Dockerfile

FROM nginx:latest

Створимо збирач docker-compose.yaml

version: '3.5'
services: 
    nginx:
        build: .
        restart: always
        ports:
            - 8081:80

8000:8080 -ми перенаправляємо порт 80 зсередини контейнера назовні на 8081

Складання та запуск контейнера.

docker-compose up --build

Запуск не через збирач

docker run -it --rm -d -p 8081:80 --name web nginx

Заходимо усередину контейнера.

docker exec -ti b42580b257e2 bash

Виводимо конфігураційний файл nginx.

cat /etc/nginx/conf.d/default.conf

b42580b257e2 - ідентифікатор контейнера, його можна отримати за допомогою команди docker ps

Однак можна і явно поставити ім’я.

version: '3.5'
services: 
    nginx:
        build: .
        container_name: my-nginx

І звертатися на ім’я.

docker exec -ti my-nginx bash

Створюємо файл конфігурації nginx.conf.

server { 
 listen 80;
 server_name localhost;
 location / {
   root /app;
   try_files $uri /index.html;
 }
}

Копіюємо конфігураційний файл усередину контейнера та створюємо папку app.

FROM nginx:latest
RUN mkdir /app
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

Зробимо посилання з поточної директорії усередину контейнера.

version: '3.5'
services: 
    nginx:
        build: .
        restart: always
        ports:
            - 8081:80
        volumes:
            - .:/app

Перекидання змінних оточення всередину контейнера.

version: '3.5'
services: 
    nginx:
        ...
        environment:
            - NGINX_PORT=8081

Але проблема в тому, що ці змінні з’являються тільки на етапі запуску контейнера, а не в момент складання образу.

Тому щоб змінювати щось на етапі збирання можна в конфігураційному файлі додати мітку.

server { 
 listen __NGINX_PORT__;
 ...
}

Потім її міняти під час збирання.

FROM nginx:latest
RUN mkdir /app
COPY ./default.conf /app/default.conf
RUN cat /app/default.conf | sed  "s/__NGINX_PORT__/8081/" > /etc/nginx/conf.d/default.conf

TODO: можна спробувати прапор -i

sed -i 's/VERSION/8.04/' /etc/nginx/conf.d/default.conf

Або грамотніше, через змінну, яку спочатку додамо в процес складання в docker-compose.yaml.

nginx:
    build: 
        context: .
        args:
            - NGINX_PORT=8084

А потім використовуємо.

ARG NGINX_PORT  
RUN cat /app/default.conf | sed  "s/__NGINX_PORT__/$NGINX_PORT/" > /etc/nginx/conf.d/default.conf