代码之家  ›  专栏  ›  技术社区  ›  DDave

docker-v不需要了?和Dockerfile

  •  1
  • DDave  · 技术社区  · 6 年前

    我读过关于使用docker的教程:

    docker run -it -p 9001:3000 -v $(pwd):/app simple-node-docker
    

    但如果我使用:

    docker run -it -p 9001:3000 simple-node-docker
    

    -v 不需要更多吗?还是从码头上拿走了WORKDIR?

    FROM node:9-slim
    # WORKDIR specifies the directory our 
    # application's code will live within
    WORKDIR /app
    

    其他教程使用 mkdir ./app

    1 回复  |  直到 6 年前
        1
  •  0
  •   David Maze    6 年前

    将应用程序内容放入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