Size: a a a

RU.Docker — Официальное Русское Сообщество

2019 April 04

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
docker-compose.yml
  web:
   image: docker.test/vokamut/nginx:latest
   restart: always
   depends_on:
     - app
   links:
     - app
   volumes:
     - ${PWD}/certs:/etc/nginx/ssl
   ports:
     - 80:80
     - 443:443
   networks:
     - docker-net
   env_file: .env.prod


Dockerfile:
FROM nginx:1.15-alpine

RUN apk --no-cache add gettext

COPY docker/vhost.conf /etc/nginx/nginx.conf.template

COPY public /var/www/public

ARG APP_DOMAIN
ENV APP_DOMAIN=$APP_DOMAIN

CMD ["/bin/sh", "-c", "/usr/bin/envsubst '$$APP_DOMAIN' < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]


vhost.conf
server {
   server_name ${APP_DOMAIN};
   listen 443 ssl http2;
   listen [::]:443 ssl http2;

   ssl_certificate /etc/nginx/ssl/${APP_DOMAIN}.crt;
   ssl_certificate_key /etc/nginx/ssl/${APP_DOMAIN}.key;

...
а зачем это делать в Dockerfile ? для обновления конфига тебе придется делать build заново
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
разве? CMD запускается при старте же и подтягивает env при билде и простом запуске же
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
разве? CMD запускается при старте же и подтягивает env при билде и простом запуске же
не проще ли держать Dockerfile без этих кастомизаций и вынести этот функционал в docker-compose? Например вот так
источник

AD

Alex Dem in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
docker-compose.yml
  web:
   image: docker.test/vokamut/nginx:latest
   restart: always
   depends_on:
     - app
   links:
     - app
   volumes:
     - ${PWD}/certs:/etc/nginx/ssl
   ports:
     - 80:80
     - 443:443
   networks:
     - docker-net
   env_file: .env.prod


Dockerfile:
FROM nginx:1.15-alpine

RUN apk --no-cache add gettext

COPY docker/vhost.conf /etc/nginx/nginx.conf.template

COPY public /var/www/public

ARG APP_DOMAIN
ENV APP_DOMAIN=$APP_DOMAIN

CMD ["/bin/sh", "-c", "/usr/bin/envsubst '$$APP_DOMAIN' < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]


vhost.conf
server {
   server_name ${APP_DOMAIN};
   listen 443 ssl http2;
   listen [::]:443 ssl http2;

   ssl_certificate /etc/nginx/ssl/${APP_DOMAIN}.crt;
   ssl_certificate_key /etc/nginx/ssl/${APP_DOMAIN}.key;

...
О, расскажите пожалуйста про ключи подробнее, я как раз возился сегодня;
Запустил, но срок у ключа - несколько месяцев
Находил гайд:

https://medium.com/@pentacent/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71

Он всем хорош, кроме одного момента, о котором автор написал:
При запуске nginx требует сгенеренный ключ, его как бы еще нет
И типа надо самому вначале любой ключ подставить либо заюзать скриптик автора гайда, что как по мне и то херня, и то херня
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Maxim Avramenko
не проще ли держать Dockerfile без этих кастомизаций и вынести этот функционал в docker-compose? Например вот так
А потом запускать docker-compose с хостовыми переменными окружения?
Зачем? если есть .env файл
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Alex Dem
О, расскажите пожалуйста про ключи подробнее, я как раз возился сегодня;
Запустил, но срок у ключа - несколько месяцев
Находил гайд:

https://medium.com/@pentacent/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71

Он всем хорош, кроме одного момента, о котором автор написал:
При запуске nginx требует сгенеренный ключ, его как бы еще нет
И типа надо самому вначале любой ключ подставить либо заюзать скриптик автора гайда, что как по мне и то херня, и то херня
Мы пока генерим вручную, но можно запихать генерацию в CMD
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
пока не решали эту проблему
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
А потом запускать docker-compose с хостовыми переменными окружения?
Зачем? если есть .env файл
docker-compose читает переменные из .env файла который лежит рядышком с ним
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Maxim Avramenko
docker-compose читает переменные из .env файла который лежит рядышком с ним
да, нам это нравится
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
да, нам это нравится
ну так зачем в Dockerfile эти все кастомизации? можно создать один образ и на его основеуже разные сервиы, не нужно будет делать на каждый сервис отдельный образ
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Так образ же один, но он при запуске у себя меняет конфиг на основе .env файла
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
Так образ же один, но он при запуске у себя меняет конфиг на основе .env файла
в вашем Dockerfile вы копируете в образ
COPY docker/vhost.conf /etc/nginx/nginx.conf.template
и получается что если нужна другая конфигурация с другим набором переменных то вам нужно создать еще один образ для нового сервиса
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Maxim Avramenko
в вашем Dockerfile вы копируете в образ
COPY docker/vhost.conf /etc/nginx/nginx.conf.template
и получается что если нужна другая конфигурация с другим набором переменных то вам нужно создать еще один образ для нового сервиса
Ну да, но это нам не требуется.
В последующем можно из docker-compose тоже по пути /etc/nginx/nginx.conf.template пробросить другой конфиг
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
docker-compose.yml
  web:
   image: docker.test/vokamut/nginx:latest
   restart: always
   depends_on:
     - app
   links:
     - app
   volumes:
     - ${PWD}/certs:/etc/nginx/ssl
   ports:
     - 80:80
     - 443:443
   networks:
     - docker-net
   env_file: .env.prod


Dockerfile:
FROM nginx:1.15-alpine

RUN apk --no-cache add gettext

COPY docker/vhost.conf /etc/nginx/nginx.conf.template

COPY public /var/www/public

ARG APP_DOMAIN
ENV APP_DOMAIN=$APP_DOMAIN

CMD ["/bin/sh", "-c", "/usr/bin/envsubst '$$APP_DOMAIN' < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]


vhost.conf
server {
   server_name ${APP_DOMAIN};
   listen 443 ssl http2;
   listen [::]:443 ssl http2;

   ssl_certificate /etc/nginx/ssl/${APP_DOMAIN}.crt;
   ssl_certificate_key /etc/nginx/ssl/${APP_DOMAIN}.key;

...
если этот кусок перенести в docker-compose то вы сможете создавать разные сервисы на основании одного образа.
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Maxim Avramenko
если этот кусок перенести в docker-compose то вы сможете создавать разные сервисы на основании одного образа.
Верно, нам нужен только один сервис, но на нескольких доменах
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
Ну да, но это нам не требуется.
В последующем можно из docker-compose тоже по пути /etc/nginx/nginx.conf.template пробросить другой конфиг
ну раз не требуется то значит все норм
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Хорошо, что поняли друг друга)
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Причем количество доменов часто меняется
источник

MA

Maxim Avramenko in RU.Docker — Официальное Русское Сообщество
Grigory Tumakov
Причем количество доменов часто меняется
используете traefik ?
источник

GT

Grigory Tumakov in RU.Docker — Официальное Русское Сообщество
Не, на разных физических машинах запускаются
источник