Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解docker卷和卷选项_Docker - Fatal编程技术网

了解docker卷和卷选项

了解docker卷和卷选项,docker,Docker,基于: 我正在尝试运行支持热重新加载的容器。根据上面的指南,运行docker run命令应该可以: docker run -it -p 8081:8080 -v ${PWD}:/app/ -v /app/node_modules --name CONTAINER_NAME FRONTEND_IMAGE 但是我不理解这部分:-v${PWD}:/app/-v/app/node_modules。看看第一部分: -v ${PWD}:/app/ 根据文件: -v的第一个参数是卷的名称。为什么选择名

基于:

我正在尝试运行支持热重新加载的容器。根据上面的指南,运行docker run命令应该可以:

docker run -it -p 8081:8080 -v ${PWD}:/app/ -v /app/node_modules --name CONTAINER_NAME FRONTEND_IMAGE
但是我不理解这部分:
-v${PWD}:/app/-v/app/node_modules
。看看第一部分:

-v ${PWD}:/app/
根据文件:

-v
的第一个参数是卷的名称。为什么选择名称
${PWD}
作为名称?在我的例子中,结果是:
/home/user/code/sample001

在第二种情况下:

-v /app/node_modules
卷甚至没有名称。与docker文档中的示例进行比较:

$ docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest
我看不出
-v/app/node\u模块
有什么意义

如果我这样做:

$ docker inspect CONTAINER_NAME
       ...

        "HostConfig": {
            "Binds": [
                "/home/user/code/sample001:/app/"
            ],
         ...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/user/code/sample001",
                "Destination": "/app",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "83cbd979484473e3a5a258b8dbad052bc8927e207aa2dc4afa73be72113d3102",
                "Source": "/var/lib/docker/volumes/83cbd979484473e3a5a258b8dbad052bc8927e207aa2dc4afa73be72113d3102/_data",
                "Destination": "/app/node_modules",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
-v${PWD}:/app/
实际上创建的是绑定,而不是卷


我缺少什么?

有三种类型的卷:主机卷、匿名卷和命名卷。看

/app/node_modules
是一个匿名卷,由docker直接处理。 如文章所述:

第二个-v标志确保主机节点_模块不会覆盖 容器的节点单元模块。为了确保这一点,我们创建了一个 /usr/src/app/node_模块的卷。如果你要运行docker运行 如果命令中没有第二个-v标志,则会出现错误 vue cli服务:未找到

构建的映像包含
app/node\u模块
中的
node\u模块
。如果在容器初始化期间未指定匿名卷,则整个
app
目录将装载在容器内覆盖 现有的
节点\u模块
目录。如果您指定了它,docker将在主机上的
/var/lib/docker/volumes
中装载卷。要找到它的位置,请运行:

docker inspect -f '{{ .Mounts }}' containerid
命令:

docker run -it -v ${PWD}:/usr/src/app -v /usr/src/app/node_modules -p 5000:5000 myapp
是指在开发中执行以将源装入容器中,因为在构建dev映像期间不会复制源

所有这些都是为了将源放在主机上,并将模块保存在容器中。原因之一是依赖关系可能取决于操作系统,因此使用节点模块的容器版本进行开发非常重要

一旦一切就绪可以投入生产,映像将从不同的
Dockerfile
构建,该文件将复制源代码并安装依赖项。在这种情况下,没有装入卷:

docker build -f Dockerfile-prod -t myapp-prod .

卷有三种类型:主机卷、匿名卷和命名卷。看

/app/node_modules
是一个匿名卷,由docker直接处理。 如文章所述:

第二个-v标志确保主机节点_模块不会覆盖 容器的节点单元模块。为了确保这一点,我们创建了一个 /usr/src/app/node_模块的卷。如果你要运行docker运行 如果命令中没有第二个-v标志,则会出现错误 vue cli服务:未找到

构建的映像包含
app/node\u模块
中的
node\u模块
。如果在容器初始化期间未指定匿名卷,则整个
app
目录将装载在容器内覆盖 现有的
节点\u模块
目录。如果您指定了它,docker将在主机上的
/var/lib/docker/volumes
中装载卷。要找到它的位置,请运行:

docker inspect -f '{{ .Mounts }}' containerid
命令:

docker run -it -v ${PWD}:/usr/src/app -v /usr/src/app/node_modules -p 5000:5000 myapp
是指在开发中执行以将源装入容器中,因为在构建dev映像期间不会复制源

所有这些都是为了将源放在主机上,并将模块保存在容器中。原因之一是依赖关系可能取决于操作系统,因此使用节点模块的容器版本进行开发非常重要

一旦一切就绪可以投入生产,映像将从不同的
Dockerfile
构建,该文件将复制源代码并安装依赖项。在这种情况下,没有装入卷:

docker build -f Dockerfile-prod -t myapp-prod .

使用
docker compose
从装载中排除子目录的类似解决方案使用
docker compose
从装载中排除子目录的类似解决方案