В 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 .
Пример вывода:
Здесь получен контейнер с идентификатором 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, которое не требует сборки и может сразу запускаться в рабочей среде).