解读三组容易混淆的Dockerfile指令
长话短说,今天分享三组容易混淆的Dockerfile指令, 帮助大家编写更优雅的Dockfile文件、构建更纯净的Docker镜像。
COPY vs ADD
COPY、ADD主体功能类似:从指定位置src拷贝文件到Docker镜像dest。
COPY <src>... <dest>
ADD <src>... <dest>
COPY只允许从Docker Engine主机上拷贝文件到Docker镜像文件;
ADD也能完成以上工作,但是ADD支持另外两种src:
文件源可以是URL
可以从src直接解压tar文件到目的地
ADD http://foo.com/bar.go /tmp/main.go
# 从指定地址下载文件,添加到镜像文件系统的/tmp/main.go位置ADD http://foo.com/bar.go /tmp/
# 因为以/结尾,将会引用url中的文件名添加到指定的目录下ADD /foo.tar.gz /tmp/
# 自动解压主机文件到指定目录
“
有趣的是,URL下载和自动解压功能不能同时生效:任何通过URL下载的压缩包文件不会自动解压。
如果拷贝本地文件到镜像,通常使用COPY,因为含义更明确
ADD支持URL文件、自动解压到指定目录,这2个特性也很棒
ARG vs ENV
ARG、ENV也让人很疑惑的,都是Dockerfile中定义变量的指令。ARG用于镜像构建阶段,ENV用于将来运行的容器。
生成镜像后,ARG值不可用,正在运行的容器将无法访问ARG变量值。
ARG VAR_NAME 5
# 构建镜像时,可提供--build-arg VAR_NAME=6 修改ARG值。
ENV主要是为容器环境变量提供默认值,正在运行的容器可访问环境变量(这是将配置传递给应用的好方法):
ENV VAR_NAME_2 6
# 启动容器时,可通过docker run -e "VAR_NAME_2=7"或docker-compose.yml提供新的环境变量值来覆盖Dockerfile中设置的ENV值。
一个小技巧:构建镜像时不能使用命令行参数重写ENV,但是你可以使用ARG动态为ENV设置默认值:
# You can set VAR_A while building the image or leave it at the default
ARG VAR_A 5
# VAR_B gets the (overridden) value of VAR_A
ENV VAR_B $VAR_A
RUN vs ENTRYPOINT vs CMD
RUN 在新层中执行命令并产生新镜像,主要用于安装新软件包。
ENTRYPOINT 执行程序的启动命令,当您想将容器作为可执行文件运行时使用。
CMD和ENTRYPOINT 都可以提供程序的启动命令;CMD另一个作用是为执行中的容器提供默认值
CMD ["executable","param1","param2"]
(可执行形式,最常见)CMD command param1 param2
(脚本形式)
CMD echo "Hello world"
# run -it <image> 输出 Hello world
“
但是当容器以命令启动,docker run -it <image> /bin/bash, CMD会被忽略,bash解析器将会运行:
root@98e4bed87725:/#
CMD ["param1","param2"]
(作为ENTRYPOINT指令默认值,此时必须提供ENTRYPOINT指令,且ENTRYPOINT也必须以Json Array形式)
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]# run -it <image> 将会输出 Hello world
# run -it <image> earth 将会输出 Hello earth
打算构建一个可执行的且常驻的镜像,最好选用ENTRYPOINT;
如果需要提供默认命令参数(可在容器运行时从命令行覆盖),请选择CMD。
Reference
https://www.ctl.io/developers/blog/post/dockerfile-add-vs-copy/
https://vsupalov.com/docker-arg-vs-env/
https://aboullaite.me/dockerfile-run-vs-cmd-vs-entrypoint/
前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)
谁说docker-compose不能水平扩展容器、服务多实例?
基于docker-compose的Gitlab CI/CD实践&排坑指南
实例解读Docker Swarm
关注我们
更多干货及潮流技术
请关注Dotnet Plus公众号
▲
▲
“阅读全文,体验更佳”
解读三组容易混淆的Dockerfile指令相关推荐
- dockerfile arg_解读三组容易混淆的 Dockerfile 指令
长话短说,今天分享三组容易混淆的Dockerfile指令, 帮助大家编写更优雅的Dockfile文件.构建更纯净的Docker镜像. COPY vs ADD COPY.ADD主体功能类似:从指定位置 ...
- 扩增子图表解读7三元图:三组差异数量和关系
点击上方蓝色「宏基因组」关注我们!专业干货每日推送! 背景介绍(Introduction) 宏基因组学 宏基因组学目前的主要研究方法包括:16S/ITS/18S扩增子.宏基因组.宏转录组和代谢组,其中 ...
- origin三元相图_扩增子图表解读7三元图:三组差异数量和关系
点击上方蓝色「宏基因组」关注我们!专业干货每日推送! 背景介绍(Introduction) 宏基因组学 宏基因组学目前的主要研究方法包括:16S/ITS/18S扩增子.宏基因组.宏转录组和代谢组,其中 ...
- NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机
嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞 好习惯,要养成 一.前言 嵌入式开发中我们要时刻保持代码的高效与整洁.在第一节中"NB-IOT开发|nbiot开发教程<一&g ...
- 比较两组数据的差异用什么图更直观_扩增子图表解读7三元图:三组差异数量和关系...
点击上方蓝色「宏基因组」关注我们!专业干货每日推送! 背景介绍(Introduction) 宏基因组学 宏基因组学目前的主要研究方法包括:16S/ITS/18S扩增子.宏基因组.宏转录组和代谢组,其中 ...
- Dockerfile 指令详解1
Dockerfile 指令详解 我们已经介绍了 FROM,RUN,还提及了 COPY, ADD,其实 Dockerfile 功能很强大,它提供了十多个指令.下面我们继续讲解其他的指令. COPY 复制 ...
- 【Docker】之 Dockerfile 指令详解
目录 Dockerfile 基本结构 Dockerfile 指令 指定基础镜像 FROM 维护者信息 MAINTAINER 元数据标签 LABEL 设置环境变量 ENV 镜像构建参数 ARG 指定工作 ...
- 十分钟熟练Dockerfile指令
LABLE 给镜像添加元数据信息 COPY 用户从宿主机的当前目录复制文件至创建的新映像文件 COPY <src> <dest> COPY ["<src> ...
- docker之Dockerfile指令介绍
Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...
最新文章
- 3.6 激活函数-深度学习-Stanford吴恩达教授
- android sdk里的各目录作用
- wenstorm设置谷歌_WebStorm+Chrome调试Vue步骤
- arm nodejs_英伟达打算收购Arm,或将成有史以来最大半导体收购案
- php怎样注释代码块,vscode怎样注释方法代码块
- 【SQL语句】 - Ctrl+3 查询表属性的存储过程 [sp_select_talberowName]
- DenseNet算法详解
- 使用arcpy遇到的那些坑(二)
- 优秀开源项目YYKit
- 人力资源管理系统详细设计说明书
- 易经- 第一卦 乾卦
- MacBook上下载安装Mysql
- 来听听外国UX设计师的22句话
- IPTV的前世今生与发展
- Linux下压缩的压缩命令
- 排序算法——十大排序算法总结与对比
- C语言 break语句
- kubernets-RBAC
- 微信真机调试时出现 (in promise) MiniProgramError {“errMsg“:“hideLoading:fail:toast can‘t be found“} Object
- Navicat Premium for Mac 11.1.8 中文破解版
热门文章
- PHP: 手把手编写自己的 MVC 框架实例教程
- Cannot resolve the collation conflict between SQL_Latin1_General_CP1_CI_AS and Latin1_General_100...
- PHP的学习--PHP的闭包
- 【2006-1】【字符统计】
- JQuery函数在IE浏览器中测试的注意事项
- 会议中的Meeting App
- vue mock模拟后台接口数据
- html走马观花效果,走马观花台湾行 用EF-S 10-18来记录风景
- PHP 基础篇 - PHP 中 DES 加解密详解
- 【Solidity】3.类型 - 深入理解Solidity