容器(六)data-packed volume container【38】

(六)data-packed volume container

在上一節的例子中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

相關文章
相關標籤/搜索