IgorPI
@IgorPI

Условие в Dockerfile?

Добрый вечер уважаемые коллеги!

Планирую разделить проект на dev and prod
Немного почитав, в google.
Приглянулась статейка

Для этого создал 2 файла

docker-compose.yml
docker-compose.dev.yml

Два файла, с абсолютно одинаковой конфигурацией, за исключением некоторых параметров

Стек проекта
---------------------------------------
Database - MySQL percona
Front - Nuxt x2 (админка + сайт)
Back - php framework
nginx x3 (для админки, сайта и back end)
phpmyadmin

Проект уже сконфигурирован!
И мне уже нравится начало.

Но не хотелось бы плодить Dockerfile!

FROM node:lts-alpine

RUN mkdir -p /nuxt-app/
WORKDIR /nuxt-app/

COPY ./package*.json /nuxt-app/
VOLUME . .

RUN npm install
RUN npm run build  # При определённых условиях я не хочу что бы эта строчка выполнялась

CMD ["npm", "start"] # Вот эту строку планирую вынести наружу. dev or start


Вопрос!

Можно ли в Dockerfile выполнять условия?

Например:

docker-compose.dev.yml
# Nuxt publication
  nuxt-public:
    container_name: gorodbrand.nuxt_public
    restart: always
    build: ./nuxt_public
    ports:
      - 3200:3000
    expose:
      - 3000
    environment:
      - ENV_MODE=""
...


docker-compose.yml
# Nuxt publication
  nuxt-public:
    container_name: gorodbrand.nuxt_public
    restart: always
    build: ./nuxt_public
    ports:
      - 3200:3000
    expose:
      - 3000
    environment:
      - ENV_MODE="RUN npm run build"
...


FROM node:lts-alpine
...
RUN npm install
ENV_MODE
...


Или какие существуют практики разделения?
Поделитесь опытом.

Спасибо!
  • Вопрос задан
  • 1134 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dimagusarov1
можешь использовать аргументы в докерфайле
https://docs.docker.com/engine/reference/builder/#arg

1 вариант
ARG BUILD_VERSION=1
FROM alpine AS base
RUN touch base
FROM base AS build-1
RUN touch build-1
FROM base AS build-2
RUN touch build-2
FROM build-${BUILD_VERSION}
RUN touch finish

docker build --build-arg BUILD_VERSION=2 .


2 вариант
ARG RAILS_ENV=development
RUN if [ "$RAILS_ENV" = "production" ]; then \
    bundle install --without development test; \
    else \
    bundle install; \
    fi

docker build --build-arg RAILS_ENV=production .
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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