@Vanookay

Как сделать сервис в Docker постоянно включенным?

Здравствуйте, есть потребность сделать документацию проекта на отдельном порту, используя для этого докер. В данный момент в yml файле вот так:
services:
  nginx:
    restart: always
    build:
      context: .
      dockerfile: docker/local/nginx/Dockerfile
    image: kenguru_local_nginx
    depends_on:
      - django
    ports:
      - 80:80
      - 443:443

  django: &django
    restart: always
    build:
      context: .
      dockerfile: docker/local/django/Dockerfile
    image: kenguru_local_django
    depends_on:
      - postgres
      - mailhog
    volumes:
      - .:/app
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    expose:
      - 8000
    command: gunicorn project.wsgi --bind 0.0.0.0:8000 --reload --worker-class=gevent --worker-connections=1000 --workers 3 --timeout 120

  docs:
    image: kenguru_local_docs
    container_name: docs
    build:
      context: .
      dockerfile: ./docker/local/docs/Dockerfile
    env_file:
      - ./.envs/.local/.django
    volumes:
      - ./docs:/docs
      - ./config:/app/config
      - ./project:/app/project
    ports:
      - "7000:7000"
    expose:
      - 7000

Dockerfile:
FROM python:3.7-slim-buster

ENV PYTHONUNBUFFERED 1

RUN apt-get update \
  # dependencies for building Python packages
  && apt-get install -y build-essential \
  # psycopg2 dependencies
  && apt-get install -y libpq-dev \
  # Translations dependencies
  && apt-get install -y gettext \
  # cleaning up unused files
  && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
  && rm -rf /var/lib/apt/lists/*

RUN pip install sphinx && pip install sphinx-rtd-theme

WORKDIR /docs

CMD make html


После успешного выполнения make html контейнер выключается. Как сделать чтобы на этом порту постоянно висела документация? Либо есть какие-то другие способы?

После команды создается сгенеренная папка _build/html в которой нужен index.html файл как начальный для этого порта.
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 3
Andrew_Pinkerton
@Andrew_Pinkerton
Не так страшны первые 99%, как оставшиеся 99%
Как вариант создат volume и использовать его для двух контейнеров:
В одном происходит билд статики
Во втором она раздается средствами nginx (можно сделать отдельный контейнер)
Ответ написан
@NubasLol
Вот как-то так сделать сборку можно

FROM python:3.7-slim-buster as docs

ENV PYTHONUNBUFFERED 1

RUN apt-get update \
  # dependencies for building Python packages
  && apt-get install -y build-essential \
  # psycopg2 dependencies
  && apt-get install -y libpq-dev \
  # Translations dependencies
  && apt-get install -y gettext \
  # cleaning up unused files
  && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
  && rm -rf /var/lib/apt/lists/*

RUN pip install sphinx && pip install sphinx-rtd-theme

WORKDIR /docs

CMD make html

###

FROM nginx:latest as nginx

COPY --from=docs /docs /var/www/html/public

CMD ["nginx", "-g", "daemon off;"]


и в docker-compose использовать только nginx, в котором будет лежать html доки.
Ответ написан
Тут делается билд. После этого сделайте второй шаг на базе nginx в который скопируйте готовые файлы (текущий помечается как временный, и из него копируются готовые файлы во второй, все в одном dockerfile, multi-stage сборка https://habr.com/ru/post/349802/ ).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы