Docker(五):容器資料卷2
阿新 • • 發佈:2018-12-14
資料卷(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