Основи роботи з Linux. / Початок роботи з Doker. / Nginx с Doker.
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