原文地址:http://www.hxstrive.com/article/642.htm
在当前目录下面创建Dockerfile文件,然后在VOLUME指令来给镜像添加一个或多个数据卷。VOLUME语法如下:
VOLUME[“/dataVolumeContainer1”, “/dataVolumeContainer2”, “/dataVolumeContainer3”]
说明:出于可移植和分享的考虑,用“-v主机目录:容器目录”这种方法不能够直接在Dockerfile中显示。由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
实例:根据定义的Dockerfile去创建镜像。
(1) 在当前秒目录下面创建Dockerfile,内容如下:
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
CMD echo "finished......success"
CMD /bin/bash
如下图:
[root@localhost ~]# vim Dockerfile
[root@localhost ~]# cat Dockerfile
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
CMD echo "finished......success"
CMD /bin/bash
(2) 根据上面创建好的Dockerfile文件构建一个新的镜像。执行“docker build -f ./Dockerfile -t mycentos .”命令去创建镜像。如下:
[root@localhost ~]# docker build -f ./Dockerfile -t mycentos .
Sending build context to Docker daemon 28.67kB
Step 1/4 : FROM centos
---> 9f38484d220f
Step 2/4 : VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
---> Using cache
---> 7d440f43e039
Step 3/4 : CMD echo "finished......success"
---> Using cache
---> 4814b80b83b4
Step 4/4 : CMD /bin/bash
---> Using cache
---> 1b896063f266
Successfully built 1b896063f266
Successfully tagged mycentos:latest
我们可以使用“docker images”命令查看我们刚刚创建的镜像(镜像ID为1b896063f266):
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos latest 1b896063f266 3 days ago 202MB
tomcat latest 5377fd8533c3 2 weeks ago 506MB
centos latest 9f38484d220f 3 months ago 202MB
hello-world latest fce289e99eb9 6 months ago 1.84kB
(3) 使用“docker run -it 镜像”启动镜像。如下:
[root@localhost ~]# docker run -it mycentos
[root@7fe9af3b60b9 /]# ll
total 12
-rw-r--r--. 1 root root 12082 Mar 5 17:36 anaconda-post.log
lrwxrwxrwx. 1 root root 7 Mar 5 17:34 bin -> usr/bin
drwxr-xr-x. 2 root root 6 Jun 30 14:10 dataVolumeContainer1
drwxr-xr-x. 2 root root 6 Jun 30 14:10 dataVolumeContainer2
drwxr-xr-x. 5 root root 360 Jun 30 14:10 dev
drwxr-xr-x. 1 root root 66 Jun 30 14:10 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Mar 5 17:34 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 5 17:34 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x. 125 root root 0 Jun 30 14:10 proc
dr-xr-x---. 2 root root 114 Mar 5 17:36 root
drwxr-xr-x. 11 root root 148 Mar 5 17:36 run
lrwxrwxrwx. 1 root root 8 Mar 5 17:34 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Jun 24 13:42 sys
drwxrwxrwt. 7 root root 132 Mar 5 17:36 tmp
drwxr-xr-x. 13 root root 155 Mar 5 17:34 usr
drwxr-xr-x. 18 root root 238 Mar 5 17:34 var
上图中,我们可以看见“dataVolumeContainer1”和“dataVolumeContainer2”目录,这就是Dockerfile创建数据卷。
问题:我们怎样查看上面“dataVolumeContainer1”和“dataVolumeContainer2”两个目录,对应宿主机对应的目录呢?
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fe9af3b60b9 mycentos "/bin/sh -c /bin/bash" 58 seconds ago Up 57 seconds mystifying_villani
[root@localhost ~]# docker inspect 7fe9af3b60b9
[
{
...
"Mounts": [
{
"Type": "volume",
"Name": "0b92644824def28ba0d88ef0b8ed169631305a4a91502b64cda70153e116cac6",
"Source": "/var/lib/docker/volumes/0b92644824def28ba0d88ef0b8ed169631305a4a91502b64cda70153e116cac6/_data",
"Destination": "/dataVolumeContainer2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "931c1d7a053f23b3292893b35d46a6fe9fae789451fa1ff84e3aad1f255b1cc5",
"Source": "/var/lib/docker/volumes/931c1d7a053f23b3292893b35d46a6fe9fae789451fa1ff84e3aad1f255b1cc5/_data",
"Destination": "/dataVolumeContainer1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
...
}
]
[root@localhost ~]#
上面描述了“dataVolumeContainer1”和“dataVolumeContainer2”目录映射到宿主主机的目录。
注意:如果向数据卷写入数据抛出“cannot open directory .: Permission denied”错误。解决办法:在挂载的目录后多加一个“--privileged=true”参数即可。
privileged
/'pr?v?l?d?d/
adj. 享有特权的;有特别恩典的
v. 给予…特权;免除(privilege的过去分词)
相关推荐
- **数据卷插件**:第三方开发者可以创建数据卷插件来扩展Docker的功能,例如支持云存储服务作为数据卷的后端。 - **命名空间隔离**:数据卷可以在不同的Docker网络命名空间中使用,这对于多租户架构尤其重要,可以...
因此,在选择数据卷类型时,需要考虑到具体的使用场景和需求。 Docker 容器技术中的数据卷类型和区别是非常重要的知识点。了解这些知识点可以帮助开发者更好地使用 Docker 容器技术,提高开发效率和产品质量。
容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...
容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...
1、使用volume卷创建容器 3 1.1 指src创建容器 3 1.2不指定src创建容器 3 1.3清除容器 3 2、使用-v参数创建容器 3 3、使用bind挂载创容器 4 三、镜像导出导入 4 1、通镜像导出与导入 4 2、通过容器导出导入镜像 4 ...
Docker数据卷 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像。另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 ...
容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...
容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...
创建和使用数据卷 使用数据卷容器 使用Docker Compose Docker Compose配置文件解说 初识Docker Machine 使用Docker Machine创建云主机... Docker Machine命令详解 Swarm简介 Swarm调度策略和过滤机制 ...
2. **数据导入与导出**:如果需要在不同环境之间转移数据,可以使用`docker cp`命令将数据卷的内容复制到本地文件系统,然后在另一环境中再复制回去。例如,将数据导出: ``` docker cp db_container:/var/lib/...
前言 Docker 数据卷和容器编排,记录下来! 数据卷 数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录...使用 docker inspect 命令找到数据卷映射目录: Docker默认将宿主机的/var/lib/docker/volume
您可以将容器的/data卷映射到主机上的卷,以便数据变得独立于正在运行的容器。 本示例使用/tmp/mariadb存储MariaDB数据,但是您可以根据需要进行修改。 容器运行时,它将使用随机密码创建一个超级用户。 您可以...
容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...
33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...
33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...
容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...
33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...
33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...
33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...