首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头-v不再需要了吗?和Dockerfile

码头-v不再需要了吗?和Dockerfile
EN

Stack Overflow用户
提问于 2018-10-07 07:58:38
回答 1查看 48关注 0票数 1

我读过关于使用码头的教程:

代码语言:javascript
复制
docker run -it -p 9001:3000 -v $(pwd):/app simple-node-docker

但如果我用:

代码语言:javascript
复制
docker run -it -p 9001:3000 simple-node-docker

它也起作用了吗?不需要更多的-v?还是从Dockerfile取行WORKDIR?

代码语言:javascript
复制
FROM node:9-slim
# WORKDIR specifies the directory our 
# application's code will live within
WORKDIR /app

另一个教程在工作文件上使用mkdir ./app,其他教程则不使用,所以WORKDIR足以在不存在的情况下自动创建文件夹

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-07 11:26:22

将应用程序内容放入Docker容器有两种常见的方法。我所见过的许多Node教程都是令人困惑的。您不需要docker run -v,只要您在进行更改时使用docker build容器。

第一种方法是将应用程序的静态副本复制到图像中。您可以通过Dockerfile这样做,通常如下所示:

代码语言:javascript
复制
FROM node
WORKDIR /app
# Install only dependencies now, to make rebuilds faster
COPY package.json yarn.lock ./
RUN yarn install
# NB: node_modules is in .dockerignore so this doesn't overwrite
# the previous step
COPY . ./
RUN yarn build
CMD ["yarn", "start"]

生成的Docker映像是独立的:如果您只有映像(可能是从存储库中docker pull编辑的),您可以运行它,正如您注意到的,没有任何特殊的-v选项。这条路径的缺点是,如果您做了任何更改,则需要重新运行docker build来重新创建映像。

第二种方法是使用docker run -v将当前源目录注入容器。例如:

代码语言:javascript
复制
docker run \
  --rm \          # clean up after we're done
  -p 3000:3000 \  # publish a port
  -v $PWD:/app \  # mount current directory over /app
  -w /app \       # set default working directory
  node \          # image to run
  yarn start      # command to run

此路径隐藏映像中/app目录中的所有内容,并将其替换为当前目录中的任何内容。这要求您有一个构建的应用程序源代码树的功能副本,因此它支持诸如实时重新加载;有助于开发,而不是您想要的在生产中的Docker。

就像我说的,我见过很多教程同时做了两件事:

代码语言:javascript
复制
# First build an image, populating /app in that image
docker build -t myimage .
# Now run it, hiding whatever was in /app
docker run --rm -p3000:3000 -v$PWD:/app myimage

您不需要-v选项,但如果应用程序更改,则需要手动重新构建。

代码语言:javascript
复制
$EDITOR src/file.js
yarn test
sudo docker build -t myimage .
sudo docker run --rm -p3000:3000 myimage

正如我在这里所指出的,docker命令需要与根等效的权限;但另一方面,最终的docker run命令非常接近于“真正”运行的内容(可能通过Docker或Kubernetes运行,但不需要应用程序源代码的副本)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52686534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档