将应用程序内容放入Docker容器有两种常见的方法。我看到的许多节点教程都做得很混乱
二者都
docker run -v
,提供给您
docker build
第一种方法是将应用程序的静态副本复制到映像中。您可以通过Dockerfile执行此操作,通常如下所示:
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构建
码头工人-v
将当前源目录注入容器。例如:
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在生产。
就像我说的,我看过很多教程
二者都
东西:
# 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
-五
选项,但如果应用程序发生更改,则确实需要手动重建。
$EDITOR src/file.js
yarn test
sudo docker build -t myimage .
sudo docker run --rm -p3000:3000 myimage
正如我在这里提到的
docker
命令需要根等效权限;但另一方面,决赛
docker run