1. 程式人生 > >Docker(五):容器資料卷2

Docker(五):容器資料卷2

資料卷(DockerFile新增)

DockerFile: 對映象的一種原始碼級的描述檔案

1、根目錄下新建mydocker資料夾並進入

2、可在DockerFile中使用VOLUME指令來給映象新增一個或多個數據卷

VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"] 說明: 出於可移植和分享的考慮,用-v主機目錄:容器月錄這種方法不能夠直接在Dockerfile中實現。 由於宿主機目錄是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。

3、File構建

[[email protected]
/]# mkdir mydocker [[email protected] /]# cd /mydocker/ [[email protected] mydocker]# vim Dockerfile [[email protected] mydocker]# cat Dockerfile # volume test FROM centos VOLUME ["/dataVolumeContainer1" ,"/dataVolumeContainer2"] CMD echo "finished,==================success1" CMD /bin/bash

4、build後生成映象

[[email protected] mydocker]# docker build -f /mydocker/Dockerfile -t zhaoyoung/centos .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 75835a67d134
Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
 ---> Running in d475b69377ad
Removing intermediate container d475b69377ad
 ---> 8ee6e2a7e7ff
Step 3/4 : CMD echo "finished,==================success1"
 ---> Running in 37d6c8534064
Removing intermediate container 37d6c8534064
 ---> eed50be084b1
Step 4/4 : CMD /bin/bash
 ---> Running in 57583c68b3b0
Removing intermediate container 57583c68b3b0
 ---> 76582507c918
Successfully built 76582507c918
Successfully tagged zhaoyoung/centos:latest

成功生成映象

[[email protected] ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
zhaoyoung/centos         latest              76582507c918        About a minute ago   200MB
zhaoyoung/nodocstomcat   1.0                 84498728984a        21 hours ago         463MB
centos                   latest              75835a67d134        37 hours ago         200MB
tomcat                   latest              41a54fe1f79d        4 weeks ago          463MB
hello-world              latest              4ab4c602aa5e        4 weeks ago          1.84kB

5、run容器

容器終端

[[email protected] ~]# docker run -it zhaoyoung/centos
[[email protected] /]# ll
total 12
-rw-r--r--.   1 root root 12030 Oct  6 19:15 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Oct  6 19:14 bin -> usr/bin
drwxr-xr-x.   2 root root     6 Oct 11 07:06 dataVolumeContainer1
drwxr-xr-x.   2 root root     6 Oct 11 07:06 dataVolumeContainer2
drwxr-xr-x.   5 root root   360 Oct 11 07:06 dev
drwxr-xr-x.   1 root root    66 Oct 11 07:06 etc
drwxr-xr-x.   2 root root     6 Apr 11  2018 home
lrwxrwxrwx.   1 root root     7 Oct  6 19:14 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Oct  6 19:14 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. 114 root root     0 Oct 11 07:06 proc
dr-xr-x---.   2 root root   114 Oct  6 19:15 root
drwxr-xr-x.  10 root root   130 Oct  6 19:15 run
lrwxrwxrwx.   1 root root     8 Oct  6 19:14 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root     0 Oct  9 09:14 sys
drwxrwxrwt.   7 root root   132 Oct  6 19:15 tmp
drwxr-xr-x.  13 root root   155 Oct  6 19:14 usr
drwxr-xr-x.  18 root root   238 Oct  6 19:14 var

容器終端 新建檔案 container01.txt

[[email protected] /]# cd dataVolumeContainer1/
[[email protected] dataVolumeContainer1]# touch container01.txt
[[email protected] dataVolumeContainer1]# ls
container01.txt
[[email protected] dataVolumeContainer1]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 11 07:25 container01.txt

宿主機終端 可以看到容器內繫結的宿主機對應的資料夾,也就是可以進行相應的資料共享了,同上一篇博文

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b27b7b555902        zhaoyoung/centos    "/bin/sh -c /bin/bash"   10 minutes ago      Up 10 minutes                           vibrant_ganguly
[[email protected] ~]# docker inspect b27b7b555902
"Mounts": [
            {
                "Type": "volume",
                "Name": "d46170d581a51392f47697441a103e3e05907106672c3c8db8bc7dbaf89241eb",
                "Source": "/var/lib/docker/volumes/d46170d581a51392f47697441a103e3e05907106672c3c8db8bc7dbaf89241eb/_data",
                "Destination": "/dataVolumeContainer1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "8b2ab63cd912e61c3fac8627a6a55fd0a9eb929d6264b4b68451a07611550fe3",
                "Source": "/var/lib/docker/volumes/8b2ab63cd912e61c3fac8627a6a55fd0a9eb929d6264b4b68451a07611550fe3/_data",
                "Destination": "/dataVolumeContainer2",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]

宿主機終端

[[email protected] ~]# cd /var/lib/docker/volumes/d46170d581a51392f47697441a103e3e05907106672c3c8db8bc7dbaf89241eb/_data
[[email protected] _data]# ll
總用量 0
-rw-r--r--. 1 root root 0 10月 11 15:25 container01.txt

宿主機終端 新建檔案host.txt

[[email protected] _data]# touch host.txt
[[email protected] _data]# ll
總用量 0
-rw-r--r--. 1 root root 0 10月 11 15:25 container01.txt
-rw-r--r--. 1 root root 0 10月 11 15:28 host.txt

容器終端

[[email protected] dataVolumeContainer1]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 11 07:25 container01.txt
-rw-r--r--. 1 root root 0 Oct 11 07:28 host.txt

如果出現以下錯誤

Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied
解決辦法:在掛載目錄後多加一-個--privileged=true引數即可
如原來的命令:
[[email protected] ~]# docker run -it -v /myDataVolume:/dataVolumeContainer centos
修改為:
[[email protected] ~]# docker run -it -v /myDataVolume:/dataVolumeContainer --privileged=true centos