利用dockerfile挂载volume

2018-09-13 21:35:13  浏览:2205  作者:琳兮

**命令添加:**

> docker run -it -v /宿主机绝对路径目录:/容器内目录:permission mirrors_name(镜像名)

> 如果挂载的和要挂载的地方不存在。他会自己创建;permission: rw读写默认。ro只读


**dockerfile构建一个自带卷组的centos**

我们直接从`https://hub.docker.com/`里面搜索centos的dockerfile文件,自己改改,一会更改的内容我标识出来


```docker

[root@Docker mydocker]# cat dockerfile 

FROM centos:latest


VOLUME ["/data_test1","/data_test2"]

CMD ["/bin/bash"]

```

这个dockerfile文件里面基于centos:latest(centos最新版)镜像构建一个我们自己挂载两个数据卷的镜像

```

build 一下把dockerfile变成镜像文件

[root@Docker mydocker]# docker build -f dockerfile -t volume_centos:1.3 .

Sending build context to Docker daemon  5.12 kB

Step 1/3 : FROM centos:latest               ---先from基础镜像

 ---> 5182e96772bf

Step 2/3 : VOLUME /data_test1 /data_test2   ---然后创建两个数据卷volume

 ---> Running in c7204dcfe31c

 ---> b476ef88c68a

Removing intermediate container c7204dcfe31c

Step 3/3 : CMD /bin/bash                    ---执行了这个命令

 ---> Running in c3b1da0b8847

 ---> 2a3114e4b5bb

Removing intermediate container c3b1da0b8847

Successfully built 2a3114e4b5bb

```

这个时候我们可以使用docker images 来查看我们刚刚构建的镜像

```

[root@Docker mydocker]# docker images 

REPOSITORY     TAG    IMAGE ID            CREATED             SIZE

volume_centos  1.3   2a3114e4b5bb        5 minutes ago       200 MB

```

可以看出来我们刚才构建镜像已经成功了

我们现在来运行一下,看看它是否真的自动挂载两个数据卷volume了


```

[root@Docker mydocker]# docker run -it --name volume volume_centos:1.3

[root@d0021331d0d7 /]# ls 

anaconda-post.log  data_test1  dev  home  lib64  mnt  proc  run   srv  tmp  var

bin                data_test2  etc  lib   media  opt  root  sbin  sys  usr

```

这个时候我们可以看出,在这个容器中的根目录下面已经生成来咱们刚才挂载的两个volume了。我们测试一下看能不能写内容进去


```

[root@d0021331d0d7 /]# touch /data_test{1,2}/test.txt

[root@d0021331d0d7 /]# ls /data_test{1,2}

/data_test1:

test.txt


/data_test2:

test.txt

```

可以看出我们能正常读写,但是这个数据卷挂载到本地的那个地方了呢?我们先ctrl+p+q不暂停退出这个容器去找一下


```

[root@Docker mydocker]# docker inspect  volume

        "Mounts": [

            {

                "Type": "volume",

                "Name": "24799514bfafd7423aa56976fe34833b80db5e292c60d53fd2a1dda8cc187908",

                "Source": "/var/lib/docker/volumes/24799514bfafd7423aa56976fe34833b80db5e292c60d53fd2a1dda8cc187908/_data",

                "Destination": "/data_test1",

                "Driver": "local",

                "Mode": "",

                "RW": true,

                "Propagation": ""

            },

            {

                "Type": "volume",

                "Name": "d46138dd071b0862ca674ec93832da67fda324d9d4970517d119af412af65e79",

                "Source": "/var/lib/docker/volumes/d46138dd071b0862ca674ec93832da67fda324d9d4970517d119af412af65e79/_data",

                "Destination": "/data_test2",

                "Driver": "local",

                "Mode": "",

                "RW": true,

                "Propagation": ""

            }

```

通过上面的source可以看出来挂载点是在自己本地的这个地方,我们去看看有没有刚才在容器里面写的数据在本地磁盘上


```

[root@Docker mydocker]# ls /var/lib/docker/volumes/d46138dd071b0862ca674ec93832da67fda324d9d4970517d119af412af65e79/_data

test.txt

[root@Docker mydocker]# ls /var/lib/docker/volumes/24799514bfafd7423aa56976fe34833b80db5e292c60d53fd2a1dda8cc187908/_data

test.txt

```

到此docker里面编写volume完成


评论区

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

【随机新闻】

返回顶部