zoukankan      html  css  js  c++  java
  • 容器(六)data-packed volume container【38】

    (六)data-packed volume container

    在上一节的例子中volume container 的数据归根到底还是在 host 里,有没有办法将数据完全放到 volume container 中,同时又能与其他容器共享呢?

    当然可以,通常我们称这种容器为 data-packed volume container。其原理是将数据打包到镜像中,然后通过 docker managed volume 共享。

    我们用下面的 Dockfile 构建镜像:

    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 中。

    build 新镜像 datapacked:

    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:

    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:

    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 的静态文件等。

  • 相关阅读:
    Apache Kafka(七)- Kafka ElasticSearch Comsumer
    【数据库】SQL经典面试题
    【数据库】SQL经典面试题
    【数据库】软件安全测试之SQL注入
    Jmeter代理服务器设置
    代理服务器之趣谈工作原理
    Jmeter之解决烦人的中文乱码问题
    Python之测试webservice接口
    Jmeter录制脚本工具之chrome插件--BlazeMeter
    如何利用Jmeter做代理录制脚本
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/14066097.html
Copyright © 2011-2022 走看看