Серия 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»