В docker compose dockerfile может указываться как со стандартным именем, так и с любым другим. Рассмотрим настройки для приложения на react в качестве примера. Используется Dockerfile.dev
Для сборки приложения будет использоваться такой Dockerfile
FROM node:alpine
WORKIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]
Вручную образ из него собирается командой
docker build -t dev -f Dockerfile.dev .
В 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'
Если контейнеры уже существовали принудительно пересобрать их их docker-compose можно добавив к docker compose up флаг —build
docker compose —build up
Для nginx можно использовать Dockerfile.dev
FROM nginx
COPY ./default.conf /etc/nginx/conf.d/defaul.conf
В prod окружении для nodejs приложений из отличий обычно имя Dockerfile — и в нем задается просто запуск сервера вместо сборки статики. Простой пример файла docker-compose.yml для prod окружения