镜像的Layer

在docker docs里面有一句话:

We’ve already seen that Docker images are read-only templates from which Docker containers are launched. Each image consists of a series of layers. Docker makes use of union file systems to combine these layers into a single image. Union file systems allow files and directories of separate file systems, known as branches, to be transparently overlaid, forming a single coherent file system.

对于docker的images,是由一层层的layer组成的,然后通过联合挂载的方式挂载成一个文件系统。

假设你有以下的dockerfile:

FROM ubuntu

ENV http_proxy 10.144.xx.xx:8080

ENTRYPOINT ["/usr/bin/bash"]

首先你选择了基础镜像ubuntu,这个镜像有很多层。可以从/val/lib/docker下面找到该镜像的信息和每一层的信息。

然后ENV是设置了一个环境变量,这句命令同样会产生一个layer,再然后就是需要执行的命令,同样会产生一个layer。如果你更改了某一层的信息,那么从这层之后所有的层都需要重新build。

更多的关于docker images的原理,可以自行百度。

DockerFile的ARG和ENV

ARG主要是定义一个变量,在你使用docker build的时候可以通过参数来设定。

docker build --build-arg =

因此如果你需要在build期间使用某些变量,那么ARG是最好的选择。

如果你是想在运行期间使用,那么ENV是唯一的选择。

ENV主要是定义环境变量,在docker run的时候ENV的配置会加载到容易内部,但ARG的参数在内部是没法看到的。同时也可以通过下面命令更改ENV的默认值:

docker run -e var=yyy

如果现在我想在BUILD的时候,改变我的环境变量,而不是每次RUN的时候更改,需要怎么做?

这个时候就就可以两者结合使用。

ARG var

ENV var=${var}

在dockerfile内部可以这样控制命令的参数。

ARG protocal

ARG address

ARG port

ENV protocal=${protocal} \

address=${address} \

port=${port}

CMD /usr/bin/lightweightservicediscovery --listen=${PROTOCAL:-ipv4}:${ADDRESS:-0.0.0.0}:${port:-49188}

//如果读取环境变量失败再采用后面的默认值。

这样既可以在build的时候通过docker build --build-arg var=xxx 来传递参数,也可以通过在运行的时候通过docker run -e var=yyy 来传递参数。

docker添加新的环境变量_DockerFile 设置环境变量相关推荐

  1. docker build 变量_DockerFile 设置环境变量

    镜像的Layer 在docker docs里面有一句话: We've already seen that Docker images are read-only templates from whic ...

  2. docker添加新的环境变量_Docker容器环境变量设置与查看

    设置环境变量 在编写Dockerfile时, 我们可以通过ENV来为Docker容器设置相关的环境变量,设置的环境变量在Docker容器中可以通过环境变量来进行引用. Docker容器环境变量设置方法 ...

  3. docker添加新的环境变量_Docker环境变量

    环境变量 环境变量通常在与您正在使用的基本映像关联的Dockerfile中设置.也有Docker为每个新容器自动设置的环境变量.您可以指定其他变量,并使用-e或--env选项重新定义Docker设置的 ...

  4. docker添加新的环境变量_docker使用教程[三]Dockfile小试牛刀

    本来计划着今天要讲关于docker数据卷部分的知识和配置操作相关的,但是今天复习docker知识的时候恰好看到了Dockfile的知识,所以今天帮大家了解一下关于如何私人定制自己的docker镜像. ...

  5. docker添加新的环境变量_Docker的安装及部署Spring Boot项目操作详解!

    本文使用Docker部署Spring Boot项目.部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven:接着搭建一个Spring Boot项目, ...

  6. Linux设置环境变量小结:设置永久变量临时变量 全局变量局部变量

    1.总结背景 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现"command not found"的提示内容.如果每次都到安装目标文件夹内,找到可执行 ...

  7. centos设置java环境变量,CentOS设置环境变量

    查看环境变量 查看某个环境变量的值,需要使用 "echo $环境变量名". echo命令用于在终端输出字符串或者变量的值,格式如下: echo [字符串 | $变量名] 常见的环境 ...

  8. centos配置c语言环境变量,CentOS7设置环境变量

    一.环境变量的概念 1.环境变量的含义 程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的. 2.环境变量的分类 1)按生效的范围分类. 系统环境变量:公共的,对全部的 ...

  9. linux取消设置环境变量,linux设置环境变量

    1.临时生效性(只对当前会话有效) export http_proxy="socks://192.168.0.1:10808" 2.永久生效性 (1)在/etc/profile尾部 ...

  10. python设置环境变量_Python设置环境变量

    python设置环境变量 We can set an environment variable in Python using os module. Python os module environ ...

最新文章

  1. java Collection-Map 之 TreeMap
  2. LTE基带芯片出货量首次超过50%
  3. DNS部署(四)之lvs+keepalived+bind架构高可用负载均衡DNS系统
  4. 循环往list中add对象却总是add的是一个对象
  5. SAP Spartacus 升级时关于 schematics 的更新
  6. python程序设计是干什么的_python程序员有学设计模式的必要吗?
  7. leetcode 117. 填充每个节点的下一个右侧节点指针 II(Populating Next Right Pointers in Each Node II)...
  8. 对于tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))的研究
  9. eclipse中引入聚合工程
  10. PDFCreator(pdf转换器电脑版免费版)官方繁体中文版V4.3.0 | PDF生成器下载 | pdf转换器哪个好用?
  11. kindle 越狱_越狱您的Kindle,实现简单的屏幕保护程序自定义
  12. Android权限Uri.parse的几种用法 (学习日记)
  13. oracle的报告,Oracle数据库(RAC)巡检报告
  14. Adaboost 算法的公式推导与讲解
  15. 我国天宫空间站以及各个仓位介绍
  16. Dell笔记本(预装win10)重装win7的方法
  17. phpexcel中文手册(转)
  18. 手机 9006 端口 不断的闪掉
  19. DC NXT TOPO flow (1)SPG flow 基础
  20. HP LaserJet Pro 300 彩色打印机 M351a - 每次重启电脑都提示安装驱动

热门文章

  1. WPS2000系列之四图文混编(转)
  2. 游戏开发设计模式(一):单例模式
  3. 一些内网穿透的软件一览表
  4. 【Excel,遗忘密码后如何撤销工作表保护密码】
  5. 反恐精英online单机版有各种武器
  6. 电脑鼠标单击变成了双击如何恢复
  7. 用计算机弹让我做你的眼睛,童珺《让我做你的眼睛 (改编版)》[FLAC/MP3-320K]
  8. 算法分析与设计实验报告——实现分治法求解棋盘覆盖问题
  9. python爬虫小说实例源码_Python下载网络小说实例代码
  10. [转]企业安全建设二——如何推动安全策略