Серия Dockerize (5 серии деталей)
Эй, добро пожаловать в ответ. Эта статья является частью серии Dockerize, обязательно проверьте введение, где я рассказываю о некоторых концепциях, которые мы собираемся использовать.
Сегодня мы рассмотрим наше приложение узла, очень похожее на то, как мы рассмотрели наше приложение React в последней части, используя преимущества схема строителя с помощью многоэтапных сборки!
Я также снял видео, если вы хотите следовать за
Настройка проекта
Я инициализировал простое приложение Express
├── node_modules ├── index.js ├── package.json └── yarn.lock
const express = require('express'); const app = express(); const PORT = process.env.PORT || 4000; app.get('/', (request, response) => { response.status(200).json({ message: 'Hello Docker!', }); }); app.listen(PORT, () => { console.log(`Server is up on localhost:${PORT}`); });
Я также настройка Esbuild чтобы объединить наш проект.
"build": "esbuild --bundle src/index.js --outfile=build/app.js --minify --platform=node"
Для получения более подробной информации вы можете проверить мою предыдущую статью Blazing Fast TypeScript с WebPack и Esbuild Анкет
Для разработки
Начнем с добавления Dockerfile
FROM node:14-alpine AS development ENV NODE_ENV development # Add a work directory WORKDIR /app # Cache and Install dependencies COPY package.json . COPY yarn.lock . RUN yarn install # Copy app files COPY . . # Expose port EXPOSE 4000 # Start the app CMD [ "yarn", "start" ]
Давайте создадим Docker-compose.dev.yml
Анкет Здесь мы также установим наш код в том чтобы мы могли синхронизировать наши изменения с контейнером во время развития.
version: "3.8" services: app: container_name: app-dev image: app-dev build: context: . target: development volumes: - ./src:/app/src ports: - 4000:4000
Давайте обновим наш Package.json
сценарии
"dev": "docker-compose -f docker-compose.dev.yml up"
Мы можем использовать -d флаг для запуска в режиме демона
Давайте начнем развиваться!
yarn dev
Отлично, наш сервер Dev встал!
Attaching to app-dev app-dev | yarn run v1.22.5 app-dev | $ nodemon src/index.js app-dev | [nodemon] to restart at any time, enter `rs` app-dev | [nodemon] watching path(s): *.* app-dev | [nodemon] starting `node src/index.js` app-dev | Server is up on localhost:4000
Для производства
FROM node:14-alpine AS builder ENV NODE_ENV production # Add a work directory WORKDIR /app # Cache and Install dependencies COPY package.json . COPY yarn.lock . RUN yarn install --production # Copy app files COPY . . # Build CMD yarn build FROM node:14-alpine AS production # Copy built assets/bundle from the builder COPY --from=builder /app/build . EXPOSE 80 # Start the app CMD node app.js
Давайте добавим Docker-compose.prod.yml
для производства
version: "3.8" services: app: container_name: app-prod image: app-prod build: context: . target: production
docker-compose -f docker-compose.prod.yml build
Давайте начнем наш производственный контейнер на порту 80
с именем React-App
docker run -p 80:4000 --name node-app app-prod
Следующие шаги
При этом мы должны быть в состоянии воспользоваться Docker в нашем рабочем процессе и быстрее развернуть наши производственные изображения на любую платформу по нашему выбору.
Не стесняйтесь обращаться ко мне в Twitter Если вы столкнетесь с какими -либо проблемами.
Серия Dockerize (5 серии деталей)
Оригинал: «https://dev.to/karanpratapsingh/dockerize-node-application-222k»