Указание Dockerfile в docker-compose.yml


В docker-compose Dockerfile может указываться как со стандартным именем, так и с любым другим. Рассмотрим настройки для приложения на react в качестве примера.

При сборке используется файл с именем Dockerfile.dev



Указиние dockerfile в docker-compose.yml


Для сборки приложения будет использоваться такой Dockerfile

FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]


Вручную образ из него собирается командой

docker build -t dev -f Dockerfile.dev .



Пример вывода:

Dockerfile в docker-compose.yml


Здесь получен контейнер с идентификатором b3a5a0d37729, который можно использовать.



В docker-compose.yml может задаваться следующая конфигурация


version: '3'
services:
    postgres:
        image: 'postgres:latest'
    redis:
        image: 'redis:latest'
    api:
        build:
           dockerfile:  Dockerfile.dev
           context: ./server
         volumes:
            - /app/node_modules
            - ./server:/app
   	  environment:
             - REDIS_HOST=redis
             - REDIS_PORT=6379
             - PGUSER=postgres
             - PGPASSWORD=postgres_password
             - PGDATABASE=postgres
             - PGPORT=5432
             - PGHOST=postgres
client:
     build:
           dockerfile: Dockerfiles.dev
           context: ./client
     volumes:
           - /app/node_modules
           - ./client:/app
worker:
     build:
           dockerfile: Dockerfiles.dev
           context: ./worker
     volumes:
           - /app/node_modules
           - ./worker:/app
nginx:
           restart: always
           build:
                dockerfile: Dockerfiles.dev
                context: ./nginx
          ports:
               -'3050:80'

Здесь для каждого контейнера есть отдельный блок конфигурации, в каждом блоке есть директива build и контекст. Директивой build указывается Dockerfile. docker-compose будет использовать его при сборке.



Если значением build является точка — docker-compose возьмёт файл со стандартным именем в каталоге.

build может вообще не быть, если его нет и значение не задано скачивается и используется стандартный образ с dockerhub. Dockerfile позволяет дополнить стандартный образ, задать какие-то опции необходимые при его использовании.




Если контейнеры уже существовали принудительно пересобрать их их docker-compose можно добавив к docker compose up флаг --build



Для nginx можно использовать Dockerfile такого вида (для dev и prod) окружения

FROM nginx
COPY ./default.conf /etc/nginx/conf.d/defaul.conf


В prod окружении для nodejs приложений из отличий обычно имя Dockerfile — и в нем задается просто запуск сервера nodejs вместо сборки статического контента. Приложение в таком виде нужно для отладки его работы.



Простой пример файла docker-compose.yml для prod окружения (для приложения на PHP, которое не требует сборки и может сразу запускаться в рабочей среде).

Сказать спасибо