在上一节的例子中volume container 的数据归根到底仍是在 host 里,有没有办法将数据彻底放到 volume container 中,同时又能与其余容器共享呢?web
固然能够,一般咱们称这种容器为 data-packed volume container。其原理是将数据打包到镜像中,而后经过 docker managed volume 共享。docker
咱们用下面的 Dockfile 构建镜像:apache
root@cuiyongchao:~/dockerfile/test01# pwd /root/dockerfile/test01 root@cuiyongchao:~/dockerfile/test01# ls Dockerfile htdocs root@cuiyongchao:~/dockerfile/test01# cat Dockerfile FROM busybox:latest ADD htdocs /usr/local/apache2/htdocs VOLUME /usr/local/apache2/htdocs root@cuiyongchao:~/dockerfile/test01#
ADD
将静态文件添加到容器目录 /usr/local/apache2/htdocs。
VOLUME
的做用与 -v
等效,用来建立 docker managed volume,mount point 为 /usr/local/apache2/htdocs,由于这个目录就是 ADD
添加的目录,因此会将已有数据拷贝到 volume 中。curl
build 新镜像 datapacked:tcp
root@cuiyongchao:~/dockerfile/test01# docker build -t datapack . Sending build context to Docker daemon 3.584kB Step 1/3 : FROM busybox:latest ---> f0b02e9d092d Step 2/3 : ADD htdocs /usr/local/apache2/htdocs ---> 028540f701e4 Step 3/3 : VOLUME /usr/local/apache2/htdocs ---> Running in 0f14a2d71a20 Removing intermediate container 0f14a2d71a20 ---> 2de846cade1b Successfully built 2de846cade1b Successfully tagged datapack:latest root@cuiyongchao:~/dockerfile/test01#
用新镜像建立 data-packed volume container:ui
root@cuiyongchao:~/dockerfile/test01# docker create --name vc_data datapack 81a3830bbc5eed741a0ca1a87a932187f9c42fbbefb118b4a18b3dbde4237701 root@cuiyongchao:~/dockerfile/test01# docker run -d -p 80 --volumes-from vc_data httpd 0b53eab130a061b6810e82fa1130026e48c69ab870660e4acc20b8248b845a55 root@cuiyongchao:~/dockerfile/test01# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0b53eab130a0 httpd "httpd-foreground" 12 seconds ago Up 11 seconds 0.0.0.0:32778->80/tcp eager_murdock
由于在 Dockerfile 中已经使用了 VOLUME
指令,这里就不须要指定 volume 的 mount point 了。启动 httpd 容器并使用 data-packed volume container:this
root@cuiyongchao:~/dockerfile/test01# curl 10.0.0.20:32778 this updata secondy! root@cuiyongchao:~/dockerfile/test01#
容器可以正确读取 volume 中的数据。data-packed volume container 是自包含的,不依赖 host 提供数据,具备很强的移植性,很是适合 只使用 静态数据的场景,好比应用的配置信息、web server 的静态文件等。url