原文地址: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数据卷 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像。另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 ...
前言 Docker 数据卷和容器编排,记录下来! 数据卷 数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录...使用 docker inspect 命令找到数据卷映射目录: Docker默认将宿主机的/var/lib/docker/volume
您可以将容器的/data卷映射到主机上的卷,以便数据变得独立于正在运行的容器。 本示例使用/tmp/mariadb存储MariaDB数据,但是您可以根据需要进行修改。 容器运行时,它将使用随机密码创建一个超级用户。 您可以...
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--快速创建...
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--快速创建...
创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过–volumes-froms参数来挂载该数据卷了,...
FROM:基础镜像,当前新镜像是基于那个镜像的 ...VOLUME:容器数据卷,用于数据保存和和持久化工作 CMD:指定一个容器启动时要运行的命令。(Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之
包含Jupyter笔记本文件的存储库,用于构建Jupyter笔记本服务器的Dockerfile(使用此存储库作为工作目录)和kubeconfig文件以将该映像作为k8s部署进行部署并创建连接到笔记本服务器的持久卷。 MusicRecSys / 包含与...
容器中数据持久化主要有两种方式: 数据卷(Data Volumes) 数据卷容器(Data Volumes Dontainers) 数据卷 数据卷是一个可供一个或多个容器使用的...创建数据卷 示例: docker run --name nginx-data -v /mydir ng
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--快速创建...
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--快速创建...
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--快速创建...