`

使用Dockerfile创建数据卷

阅读更多

原文地址: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数据卷管理(教程).md

    首先,创建数据卷是使用Docker数据卷的第一步。可以通过执行`docker volume create`命令来创建一个数据卷,例如命令`docker volume create myvolume`会创建一个名为`myvolume`的数据卷。创建数据卷后,就可以将它...

    Docker容器的数据卷:持久化存储的秘诀

    - **数据卷插件**:第三方开发者可以创建数据卷插件来扩展Docker的功能,例如支持云存储服务作为数据卷的后端。 - **命名空间隔离**:数据卷可以在不同的Docker网络命名空间中使用,这对于多租户架构尤其重要,可以...

    Docker容器技术-数据卷的类型与区别.pptx

    因此,在选择数据卷类型时,需要考虑到具体的使用场景和需求。 Docker 容器技术中的数据卷类型和区别是非常重要的知识点。了解这些知识点可以帮助开发者更好地使用 Docker 容器技术,提高开发效率和产品质量。

    云计算Docker从零基础到专家实战教程33-数据卷的创建 共3页.pptx

    容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...

    云计算Docker从零基础到专家实战教程44-Dockerfile的使用 共4页.pptx

    容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...

    docker容器创建到镜像库私用部署整套案例

    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 ...

    Dockerfile

    Docker数据卷 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像。另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 ...

    云计算Docker从零基础到专家实战教程35-数据卷容器 共4页.pptx

    容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...

    云计算Docker从零基础到专家实战教程32-什么是数据卷 共6页.pptx

    容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...

    Docker Dockerfile文件配置详解

    Dockerfile是Docker镜像构建过程中使用的一种文本文件,它包含了用于自动化创建Docker镜像的一系列指令。通过Dockerfile,开发者可以确保镜像创建的一致性和可重复性,从而简化镜像的构建和分发过程。 1. **基础...

    "Docker入门与实践课程讲义及参考

    创建和使用数据卷 使用数据卷容器 使用Docker Compose Docker Compose配置文件解说 初识Docker Machine 使用Docker Machine创建云主机... Docker Machine命令详解 Swarm简介 Swarm调度策略和过滤机制 ...

    dify-dockerfile

    9. VOLUME:创建一个挂载点,用于在容器运行时挂载外部存储,比如数据卷。 10. EXPOSE:声明容器需要监听的端口,这有助于容器间的通信。 11. WORKDIR:设置工作目录,为RUN、CMD、ENTRYPOINT、COPY和ADD指令设置...

    关于在compose数据窗口中进行数据转移

    2. **数据导入与导出**:如果需要在不同环境之间转移数据,可以使用`docker cp`命令将数据卷的内容复制到本地文件系统,然后在另一环境中再复制回去。例如,将数据导出: ``` docker cp db_container:/var/lib/...

    Docker技术入门与实战,包括简介、基础入门、实战案例、进阶技能、开源项目、附录

    最后,书中还涉及了Docker数据管理,包括数据卷的创建和使用、数据卷容器的迁移数据方法以及端口映射和容器互联的实现方法,确保读者可以有效地管理Docker中的数据和网络通信。 通过本书的学习,读者不仅能够掌握...

    Docker数据卷和容器编排的使用

    前言 Docker 数据卷和容器编排,记录下来! 数据卷 数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录...使用 docker inspect 命令找到数据卷映射目录: Docker默认将宿主机的/var/lib/docker/volume

    docker-mariadb:一个Dockerfile生成运行MariaDB的Docker映像

    您可以将容器的/data卷映射到主机上的卷,以便数据变得独立于正在运行的容器。 本示例使用/tmp/mariadb存储MariaDB数据,但是您可以根据需要进行修改。 容器运行时,它将使用随机密码创建一个超级用户。 您可以...

    云计算Docker从零基础到专家实战教程23-容器创建实战 共4页.pptx

    容器的导入和导出32-什么是数据卷33-数据卷的创建34-挂载35-数据卷容器36-数据迁移37-学会备份38-通过网络访问容器39-容器间通信的实现40-网络配置的查看41-容器命名42-容器连接143-容器连接244-Dockerfile的使用45-...

    云计算Docker从零基础到专家实战教程13-如何创建镜像 共5页.pptx

    33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...

    云计算Docker从零基础到专家实战教程21-注册服务器的创建 共4页.pptx

    33-数据卷的创建 34-挂载 35-数据卷容器 36-数据迁移 37-学会备份 38-通过网络访问容器 39-容器间通信的实现 40-网络配置的查看 41-容器命名 42-容器连接1 43-容器连接2 44-Dockerfile的使用 45-实训项目1--快速创建...

Global site tag (gtag.js) - Google Analytics