Установим прокси-сервер nginx apache c возможностью управлять переменными окружения.
Создадим стартовую страницу 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