我正在努力深入了解Docker的数量,并且我很难弄清楚差异/用例:
docker volume create命令docker run -v /path:/host_pathVOLUME条目Dockerfile我特别不明白如果将VOLUME条目与-v标志组合起来会发生什么.
如果有人理解得很好,请解释我!
我正在编写一个Dockerfile来设置用于测试Web应用程序的映像.我基于tutum/lamp图像(https://github.com/tutumcloud/tutum-docker-lamp/blob/master/Dockerfile),因为这似乎是一个很好的基础.
作为我的dockerfile的一部分,我想创建一个mysql数据库并在其中设置一些东西.但是,tutum/lamp图像声明VOLUME ["/etc/mysql", "/var/lib/mysql" ],所以如果我理解正确,我在Dockerfile中对MySQL数据库所做的任何更改都不会被保留.
如是,
谢谢!
我有一个用 Rust 编写的简单程序。当我cargo run在终端输入时,它总是显示:
Updating crates.io index...
Run Code Online (Sandbox Code Playgroud)
这大约需要 40 秒。但我只是想执行我的程序,并且我认为货物不需要每次运行程序时都更新索引,因为这使得测试非常慢......
有没有一个选项可以跳过它?
我很难理解VOLUME(https://docs.docker.com/engine/reference/builder/#volume)的附加优势.
在Dockerfile中,可以使用mkdir来创建目录.创建目录后,我们可以处理它.为什么指定VOLUME(mount)并分配给该目录?VOLUME mount有什么优势?我试图在没有VOLUME的情况下理解我们会错过什么.
对我来说它看起来像一个冗余的功能,但我可能是错的.
首先,我想明确表示我已经在研究这个主题方面做了尽职调查.非常密切相关的是这个问题,这并没有真正解决我的困惑.
我知道,当VOLUME在Dockerfile中指定时,这指示Docker在容器的持续时间内创建一个未命名的卷,该容器被映射到其内部的指定目录.例如:
# Dockerfile
VOLUME ["/foo"]
Run Code Online (Sandbox Code Playgroud)
这将创建一个卷来包含存储在/foo容器内的任何数据.音量(通过观看时docker volume ls)会显示为随机混乱的数字.
每次执行docker run此操作时,不会重复使用此卷.这是引起混淆的关键点.对我来说,卷的目标是在所有映像实例中包含状态持久性(所有容器都从它开始).所以基本上如果我这样做,没有明确的卷映射:
#!/usr/bin/env bash
# Run container for the first time
docker run -t foo
# Kill the container and re-run it again. Note that the previous
# volume would now contain data because services running in `foo`
# would have written data to that volume.
docker container stop foo
docker container rm foo
# …Run Code Online (Sandbox Code Playgroud) VOLUME指令应用于公开由docker容器创建的任何数据库存储区域,配置存储或文件/文件夹.强烈建议您将VOLUME用于图像的任何可变和/或用户可维修部分.
你会将你的代码存储在卷中吗?
比如你的jar文件.在不重建映像的情况下部署应用程序可能会有点方便.
如果将代码存储在卷中,是否有任何考虑因素?喜欢表现,安全或其他.
以下是Dockerfile:
FROM golang:1.14.10
MAINTAINER xyz
COPY ~/go/bin/product-api /go/bin/product-api
COPY ~/go/bin/swagger /go/bin/swagger
ENTRYPOINT ["/go/bin/product-api"]
Run Code Online (Sandbox Code Playgroud)
上docker build -t cloud-native-product-api:1.0.0 .,给出了错误:
Step 3/5 : COPY ~/go/bin/product-api /go/bin/product-api
COPY failed: stat /var/lib/docker/tmp/docker-builder398080099/~/go/bin/product-api: no such file or directory
Run Code Online (Sandbox Code Playgroud)
我认为图像构建过程将/var/lib/docker/tmp/docker-builder398080099作为工作区并从该路径引用。
如何将文件从本地机器的特定文件夹复制到 Docker 镜像中?
我有一个 docker-compose 文件,可以启动多个服务。我刚刚收到一条错误消息,指出我的磁盘空间不足,因此我输入“docker system df”并看到我有 21 个卷。如果我有 3 个 docker 容器,每个容器都附加一个卷,为什么它显示的卷总数为 21 个?
我正在使用 AWS EC2。这是我的撰写文件,我设置卷的方式有什么问题吗?当我关闭并重新启动时,postgres 数据得到保留,我只是对卷大小和由于 T2 Large 实例上没有空间而无法重建的消息感到困惑。
version: "3"
services:
nftapi:
env_file:
- .env
build:
context: .
ports:
- '443:5000'
depends_on:
- postgres
volumes:
- .:/app
- /app/node_modules
networks:
- postgres
postgres:
container_name: postgres
image: postgres:latest
ports:
- "5432:5432"
volumes:
- /data/postgres:/data/postgres
env_file:
- docker.env
networks:
- postgres
pgadmin:
links:
- postgres:postgres
container_name: pgadmin
image: dpage/pgadmin4
ports:
- "8080:80"
volumes:
- /data/pgadmin:/root/.pgadmin
env_file:
- docker.env
networks:
- …Run Code Online (Sandbox Code Playgroud)