bin文件的应用场景是什么

在容器内部创建的默认文件都会被保存在基于镜像的可读写层上。这一层是依赖于容器的存在而存在的,也就是说,一旦容器消失,这些文件也会跟着消失。而且因为这些文件被紧密地捆绑在容器内部,很难进行导出操作。对容器的这一层进行写操作还需要额外的系统支持,相较于挂载卷这种直接写入主机文件系统的做法效率更低。
Docker提供了两种独立于容器之外的持久化存储技术,即卷挂载和绑定挂载。两者在容器内部看起来是一样的,但存在明显区别。
在实际应用中,一般来说使用Volume是更合适的选择。但在某些特殊场景下,例如需要共享主机的重要系统配置文件时,可以选择使用Bind mounts。而对于tmpfs mounts,它可能适用于一些不希望数据被持久化的敏感场景。
在命令使用方面,过去通常使用-v或--volume来挂载卷给Docker容器,使用--mount来给swarm service挂载卷。但从Docker 17.06版本开始,官方推荐使用--mount来统一进行容器挂载卷的存储操作。--mount的语义更加明确,语法也更加清晰。
举个例子,可以使用以下命令来运行一个容器并挂载卷:
`docker run -d --mount source=my-vol,target=/webapp ubuntu:18.04 /bin/sh -c "while true; do echo 'hello world'; sleep 1; done"`
这里使用的--mount参数后面跟着的是键值对,其中source指的是主机上的文件目录名,target则是容器内的路径。
如果你想查看容器的详细信息,可以使用docker inspect命令。在返回的Mounts标签下,你可以查看到挂载的信息。例如:
json
"Mounts": [
{
"Type": "volume",
"Name": "my-vol",
"Source": "/var/lib/docker/volumes/my-vol/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
要查看主机上的目录,可以直接前往`/var/lib/docker/volumes/my-vol/_data`。而要查看容器内的目录,可以通过`docker exec -it`命令进入容器的命令行交互界面,然后你就可以看到我们挂载的target目标文件夹 /webapp。
最后需要注意的是,当你想删除一个volume时,仅仅删除容器是不够的。你需要执行`docker volume rm my-vol`来删除volume。
