【发布时间】:2019-05-16 09:23:54
【问题描述】:
我是 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 可以做这样的事情吗? docker只需要加载我的项目文件夹(运行命令时会传递路径)。
然后它运行npm install、npm start/dev。所有库都将保存到我的本地目录中。或者我手动运行 npm start 然后 docker 加载我的文件和主机。
我只需要 docker 作为我的应用程序服务器,以确保我可以获得与部署到生产服务器相同的结果。
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()
【问题讨论】:
标签: node.js docker npm virtual-machine