zoukankan      html  css  js  c++  java
  • Dockerfile指令详解--VOLUME 指令

    Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。Alpine Linux提供了自己的包管理工具:apk,我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息。

    Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker进行,它的体积非常小,docker.io/alpine:3.7只有4.15M,而 CentOS和Ubuntu系列的Docker镜像则都在200M左右。据说Docker官方也已开始推荐使用Alpine替代之前的Ubuntu来作为基础镜像,因为这样会带来多个好处,包括镜像下载速度加快,镜像安全性提高,占用更少的主机磁盘空间等。

    Alpine Docker为了精简体积,默认是没有安装bash的。 需要的话可以查看官方文档:https://www.cyberciti.biz/faq/alpine-linux-install-bash-using-apk-command/

    -----------------------------------------------------------------------------------------------------------------------------

    格式为:

    VOLUME ["<路径1>", "<路径2>"...] 
    VOLUME <路径> 

    之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,后面的章节我们会进一步介绍 Docker 卷的概念。

    为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。

    VOLUME /data

    这里的 /data 目录就会在运行时自动挂载为匿名卷,任何向 /data 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。当然,运行时可以覆盖这个挂载设置。比如:

    docker run -d -v mydata:/data xxxx

    在这行命令中,就使用了 mydata 这个命名卷挂载到了 /data 这个位置,替代了 Dockerfile 中定义的匿名卷的挂载配置。

    使用 dokcer inspect mycontainer 可以查看到具体的挂载情况:

    如上图所示,容器中的"/home/xiaoban/logs/eureka-server/log" 被自动匿名挂载到了本地机器上的 /var/lib/docker/volumes/***

  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/9925065.html
Copyright © 2011-2022 走看看