2016-08-04 5 views
7

Мне было интересно, есть ли у кого-нибудь опыт использования приложения-приложения-приложения с докером. Я был в состоянии получить его настроить с Dockerfile как:«Создать приложение React» с Docker

from node 
RUN mkdir /src 
WORKDIR /src 
ADD package.json /src/package.json 
RUN npm install 
EXPOSE 3000 
CMD [ "npm", "start" ] 

А затем использовали Докер-Compose файл как:

app: 
    volumes: 
    - "./app:/src" 
    ports: 
    - "3000:3000" 
    - "35729:35729" 
    build: ./app 

Это позволило мне запустить контейнер и просматривать приложения. Однако при сохранении файлов в смонтированном томе печенье не работало, и webpack создал несколько файлов .json.gzip в каталоге src.

Любые предложения по обеспечению правильной работы?

+1

Я думаю, докер не является правильным инструментом для того, что вы хотите иметь. Просто разработайте на вашей машине с живой перезагрузкой и другими функциями, которые вам нравятся, и создайте контейнеры/изображения только для выпущенной версии или для автоматического тестирования ... Неясно, зачем вам нужен докер для разработки здесь ... – aholbreich

+0

livereload должен работать, если вы с помощью Docker для Mac или с помощью docker на linux. Если вы все еще используете Docker Toolbox (с виртуальной машиной), сообщалось, что просмотр файлов часто не работает. – dnephin

+0

@dnephin благодарит за отзыв, подключенный к Docker для Mac, и все отлично работает. –

ответ

5

Да, как упоминалось выше, я бы использовал npm install/npm start на моей машине для разработки, просто потому, что это так просто. Возможно, это возможно и с docker-compose, и томами для сборки и т. Д., Но я думаю, что это может быть немного затруднительно настроить.

Для развертывания вы можете очень легко использовать файл Dockerfile. Вот пример Dockerfile я использую:

FROM node:6.9 

# Create app directory 
RUN mkdir -p /src/app 
WORKDIR /src/app 

# to make npm test run only once non-interactively 
ENV CI=true 

# Install app dependencies 
COPY package.json /src/app/ 
RUN npm install && \ 
    npm install -g pushstate-server 

# Bundle app source 
COPY . /src/app 

# Build and optimize react app 
RUN npm run build 

EXPOSE 9000 

# defined in package.json 
CMD [ "npm", "run", "start:prod" ] 

Вы должны добавить опцию start:prod к вашему package.json:

"scripts": { 
    "start": "react-scripts start", 
    "start:prod": "pushstate-server build", 
    "build": "react-scripts build", 
    "test": "react-scripts test --env=jsdom", 
    "eject": "react-scripts eject" 
}, 

Вы можете запустить тесты на вашей службы CI с:

docker run <image> npm test 

Нет ничего, что помешало бы вам запустить этот контейнер-докер локально, чтобы убедиться, что все работает должным образом.

6

Недавно я сделал небольшой проект под названием hello-docker-react, который просто выполняет то, что ищет op.

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

Живая перезагрузка работает безупречно, и я еще не нашел никаких проблем.

https://github.com/lopezator/hello-docker-react

+1

Эта настройка отлично работает – Dmitry