Как загрузить статические файлы из сборки в контейнер?

Как можно настроить веб-сервер в Docker контейнере с React приложением, чтобы проект корректно отображался на локальной машине после запуска контейнера?
Изображение к вопросу
  • 6 января 2024 г. 19:07
Ответы на вопрос 2
Для того чтобы загрузить статические файлы из сборки в Docker контейнер, вам потребуется выполнить следующие шаги:

1. Создайте `Dockerfile` в корне вашего React проекта, если он еще не существует. Пример `Dockerfile` для создания образа с React приложением может выглядеть так:

```Dockerfile
# Используйте официальный образ Node.js как базовый
FROM node:14 AS build

# Установите рабочую директорию внутри контейнера
WORKDIR /app

# Скопируйте файлы package.json и package-lock.json
COPY package*.json ./

# Установите зависимости проекта
RUN npm install

# Скопируйте исходный код проекта в контейнер
COPY . .

# Соберите статические файлы проекта
RUN npm run build

# Используйте образ nginx для раздачи статических файлов
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

# Определите порт, который будет прослушивать веб-сервер
EXPOSE 80
```

2. Создайте конфигурационный файл `nginx.conf` для настройки веб-сервера в соответствии с вашими потребностями. Пример конфигурации Nginx для обслуживания React приложения:

```nginx
server {
    listen       80;
    server_name  localhost;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
```

Эта конфигурация Nginx обрабатывает клиентский роутинг, перенаправляя все запросы на `index.html`, что важно для одностраничных приложений (SPA).

3. Создайте образ Docker с вашим приложением, выполнив в терминале команду:

```shell
docker build -t react-app .
```

Здесь `react-app` — это имя вашего образа.

4. Запустите контейнер из созданного образа с пробросом порта, чтобы приложение было доступно на локальной машине:

```shell
docker run -d -p 8080:80 react-app
```

Здесь `8080` — это порт на вашей локальной машине, а `80` — порт, который прослушивает веб-сервер внутри контейнера.

Теперь, если вы перейдете в веб-браузере по адресу `http://localhost:8080`, вы должны увидеть свое React приложение.
После билда нужно все положить в /app
Похожие вопросы