Могу ли я сделать Docker средой без сохранения кода - PullRequest
0 голосов
/ 16 мая 2019

Я новичок в Docker, и мне интересно, могу ли я использовать Docker только в качестве среды приложения?

У меня есть Dockerfile, который позволяет мне создавать образ Docker и позволяет другим товарищам по командеи сервер может запустить мой проект.

FROM node:10.15.3
ADD . /app/
WORKDIR /app
RUN npm install
RUN npm run build
ENV HOST 0.0.0.0
ENV PORT 3000
EXPOSE 3000
CMD ["npm", "run","start"]

Проект может быть собран и запущен.Все отлично.

Однако я обнаружил, что все файлы будут заархивированы в файлы изображений.Мой исходный код и все node_modules.Это делает файлы слишком большими.

И я помню, что в моем предыдущем проекте я создал виртуальную машину Linux и привязал папку своего проекта к гостевой ОС.Тогда я смогу продолжить разработку и использовать vm в качестве сервера.

Может ли Docker сделать что-то подобное?Докеру нужно только загрузить папку моего проекта (которая будет проходить путь при запуске команды).

Затем он запускает npm install, npm start/dev.Вся библиотека будет сохранена в моем локальном каталоге.ИЛИ Я запускаю npm start вручную, затем докер загружает мои файлы и хост.

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

Может ли Docker это сделать?

============================== Обновить ================================

Я пытаюсь использовать для этого связывающее монтирование.Затем я создаю docker-compose

version: "3.7"
services:
  web:
    build: .
    volumes:
      -  type: bind
         source: C:\myNodeProject
         target: /src/
    ports:
      - '8888:3000'

и обновляю dockerfile

FROM node:10.15.3

# Install dependencies
WORKDIR /src/


# I ran 'CMD ls' then confirm that the directory is blinded 

# Expose the app port
EXPOSE 3000

# Start the app
CMD  yarn dev

и получаю ошибку

web_1  | yarn run v1.13.0
web_1  | $ cross-env NODE_ENV=development nodemon server/index.js --watch server
web_1  | [nodemon] 1.18.11
web_1  | [nodemon] to restart at any time, enter `rs`
web_1  | [nodemon] watching: /src/server/**/*
web_1  | [nodemon] starting `node server/index.js`
web_1  | [nodemon] app crashed - waiting for file changes before starting...

index.js

const express = require('express')
const consola = require('consola')
const { Nuxt, Builder } = require('nuxt')
const app = express()

// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = !(process.env.NODE_ENV === 'production')

async function start() {
  // Init Nuxt.js
  const nuxt = new Nuxt(config)

  const { host, port } = nuxt.options.server

  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  } else {
    await nuxt.ready()
  }

  // Give nuxt middleware to express
  app.use(nuxt.render)

  // Listen the server
  app.listen(port, host)
  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true
  })
}
start()

1 Ответ

1 голос
/ 16 мая 2019

Docker также может работать так, как вы предлагали использовать Volume Bind из Host OS, он полезен при разработке, в то время как вы можете редактировать свои коды, и контейнер Docker может немедленно запустить этот код.

Однако в производстве вы не хотите следовать той же практике.

Основными принципами контейнеров Docker является то, что изображение является неизменным. После того, как вы создали его, оно не подлежит изменению, и если вы хотите внести изменения, вам потребуется создать новый образ в результате.

И вы опасаетесь, что Docker может загружать все необходимые зависимости в производственной среде так же, как и локальные, эта штука управляется package.lock.json, что гарантирует, что когда кто-то запустит npm install, он установит те же зависимости.

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

...